[英]Standard Deviation Array(My algorithm is wrong)
我是一个初学者,学习如何编程。
public static void main()
{
int array[] = {1,-2,4,-4,9,-6,16,-8,25,-10};
System.out.print(stdev(array));
}
public static double stdev(int array[])
{
int stdev = 0;
int average = 0;
for(int i = 0; i<array.length;i++)
{
average = average+array[i];
}
average = average/array.length;
for(int i = 0; i <array.length;i++)
{
stdev = stdev +(array[i]- average)*(array[i]- average);
}
return Math.sqrt((double) stdev/(array.length));
}
}
在我的教科书中,它说返回值为11.237,但我得到了10.672。 请检查我的Java代码。 提前致谢
average和stdev应该是双精度,而不是整数。
average = average/array.length;
否则,您最终将使用int除法,该除法将返回截断的数字。
区别在于您的计算应使用Wikipedia文章中的“正确的标准偏差”。 平方根中的分子应为数组的长度-1:
public static double stdev(int array[]) {
double sum = 0.0;
for (int i = 0; i < array.length; i++) {
sum += array[i];
}
double average = sum / array.length;
double sumOfSquares = 0.0;
for (int i = 0; i < array.length; i++) {
sumOfSquares += (array[i] - average) * (array[i] - average);
}
// **** the issue is below -- you need to subtract 1 from array.length ******
return Math.sqrt(sumOfSquares / (array.length - 1));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.