Java 标准差数组(我的算法错误)

Java 标准差数组(我的算法错误),java,Java,我是一个初学者,学习如何编程 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

我是一个初学者,学习如何编程

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));
}
publicstaticvoidmain()
{
int数组[]={1,-2,4,-4,9,-6,16,-8,25,-10};
系统输出打印(stdev(数组));
}
公共静态双标准差(int数组[])
{
int-stdev=0;
整数平均=0;

对于(int i=0;iaverage)和stdev,应该是双倍的,而不是int

average = average/array.length;
否则,您将使用int除法,该除法返回一个截断的数字


不同之处在于,您的计算应使用符合的“校正标准偏差”。平方根中的分子应为数组的长度-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));
}
publicstaticdoublestdev(int数组[]){
双和=0.0;
for(int i=0;i
BigDecimal
了解更多信息prescision@JigarJoshi:也许有点过分了。哦,是的,我明白了xD@axue2014:让我们看看您做了什么:请在之前将任何新代码发布到原始问题的底部。@axue2014:您需要更正公式。请参阅“编辑”以回答。