我的大部分程序代码都已完成。我需要标准偏差的帮助。当我运行程序时,它编译并给我值,但我认为std值不正确。我不认为使用arr[ROWS][COLS]
是最好的方法,但我还是用它来显示数组中的所有值。我认为这就是给我错误输出的原因。我如何解决它?使用不同的方式显示每个值,但如何?循环应该运行24次。每次使用时会说number[0]
- 平均然后保留它然后将其添加到说number[1]
- 平均一直到它达到数组中的最大数量。
这是标准差的公式。
n是数组中的值的数量。 ------->我的MAX_VALUES等于n。
89 93 23 89 78 99
95 21 87 92 90 89
94 88 65 44 89 91
77 92 97 68 74 82
//To calculate standard deviation of 2-D array
double getStandardDeviation(int arr[ROWS][COLS], double &std, double average, int num, const int MAX_VALUES)
{
double devSum = 0; //sum of every value in array minus the average that is then squared
for (int x = 0; x < MAX_VALUES; x++)
{
devSum += pow((arr[ROWS][COLS] - average), 2);
}
std = sqrt(devSum / (MAX_VALUES - 1));
return std;
}
//end of getStandardDeviation method
答案 0 :(得分:0)
getStandardDeviation
中的错误是您为ROW
的每个值使用了错误的索引COL
和x
。
而不是
for (int x = 0; x < MAX_VALUES; x++)
{
devSum += pow((arr[ROWS][COLS] - average), 2);
// ^^^^^^^^^^^ Wrong indices
}
使用
double square(double x)
{
return x*x;
}
for ( int r = 0; r < ROWS; ++r )
{
for ( int c = 0; c < COLS; ++c )
{
// Use of pow(..., 2) is not necessary.
// devSum += pow((arr[r][c] - average), 2);
// Use a more efficient method.
devSum += square(arr[r][c] - average);
}
}