2014-05-22 41 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