簡體   English   中英

標准偏差數組(我的算法錯誤)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM