2014-05-22 42 views
-1

我是初學者如何編程。標準偏差數組(我的算法錯誤)

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代碼。在此先感謝

回答

4

平均和stdev應該是雙打,而不是整數。

average = average/array.length; 

否則,您最終會使用返回截斷數字的int除法。


不同的是,你的計算應該使用「修正標準偏差」爲每Wikipedia article。在平方根的分子應該是陣列的長度 - 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)); 
} 
+0

或'BigDecimal'爲更prescision –

+2

@JigarJoshi:有點矯枉過正也許。 –

+0

ohhh yeeaaa ..我看到xD – axue2014