首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >代码没有找到正确的方差

代码没有找到正确的方差
EN

Stack Overflow用户
提问于 2013-12-16 13:03:14
回答 2查看 64关注 0票数 3

我正在为我的AP计算机科学课写代码,我需要找出一组数字的方差。对于那些不知道如何求方差的人来说,它是平均值的差值的平方和,除以长度减去1。为了让这一点更容易理解,这里有一个例子。如果您有数据{1,5,8,7,2,7},则平均值为6。您的方差将为(1-6)^2 + (5-6)^2 + (8-6)^2 + (7-6)^2 + (2-6)^2 + (7-6)^2/5 = 8.4。所以这就是方法。

代码语言:javascript
运行
复制
public static double variance(int[] data) {
    int sum = 0;
    double average;

    for (int i=0; i < data.length; i++) {
        sum = sum + data[i];
    }
    average = (double)sum/data.length;

    for (int i=0; i < data.length; i++) {
        data[i] = data[i] - (int)average^2;
    }

    int add = 0;
    for (int d : data)
        add += d;
    add = add/data.length-1;
    return add;
    }
}

我不允许改变整数数组的数据,我不知道为什么我得到了错误的方差,请帮帮忙!

EN

回答 2

Stack Overflow用户

发布于 2013-12-16 13:05:35

你最明显的问题在这里:

average^2

^运算符不是幂运算。它是bitwise XOR

使用:

代码语言:javascript
运行
复制
Math.pow(average, 2)

代码语言:javascript
运行
复制
average * average

另外,

您应该是偏差的平方,而不是平均值。do‘t do cast

  • add/data.length-1 is wrong

  • Modifying

  • (int) data is unnecessary.

再加上一点清理,

代码语言:javascript
运行
复制
public static double variance(int[] data) {
    int sum = 0;
    for (int datum : data) {
        sum += datum;
    } 
    double average = (double)sum / data.length;

    double devianceSum = 0;
    for (int datum : data) {
        devianceSum += Math.pow(datum - average, 2);
    }
    return devianceSum / data.length;
}
票数 6
EN

Stack Overflow用户

发布于 2013-12-16 13:28:58

在你的代码中有几个点,你的计算失去了精度,这可能会导致你的答案与你期望的相去甚远。如前所述,您必须在Java语言中使用Math.pow进行求幂。但这需要应用于每个值与平均值的差异,而不仅仅是平均值本身。本质上,您需要的是括号(a-b)^2而不是a - b^2 (在数学语法中)。您还应该始终使用double而不是int作为数据类型。

代码语言:javascript
运行
复制
public static double variance(int[] data) {
    double sum = 0;
    double average;
    double[] deviations = new int[data.length];

    for (int i=0; i < data.length; i++) {
        sum += data[i];
    }
    average = sum/data.length;

    for (int i=0; i < data.length; i++) {
        deviations[i] = Math.pow(data[i] - average, 2);
    }

    double result = 0;
    for (Double d : deviations)
        result += d;

    result = result/data.length-1;

    return result;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20603802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档