格式化代码以解决2D阵列的标准偏差时遇到问题

时间:2015-03-21 04:59:06

标签: c++ arrays

我的大部分程序代码都已完成。我需要标准偏差的帮助。当我运行程序时,它编译并给我值,但我认为std值不正确。我不认为使用arr[ROWS][COLS]是最好的方法,但我还是用它来显示数组中的所有值。我认为这就是给我错误输出的原因。我如何解决它?使用不同的方式显示每个值,但如何?循环应该运行24次。每次使用时会说number[0] - 平均然后保留它然后将其添加到说number[1] - 平均一直到它达到数组中的最大数量。


这是标准差的公式。

  • s是标准偏差。
  • M是平均值或平均值。 ----->我已经有了双倍的平均值作为M
  • n是数组中的值的数量。 ------->我的MAX_VALUES等于n。

    * X表示数组中的每个值。

    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

1 个答案:

答案 0 :(得分:0)

getStandardDeviation中的错误是您为ROW的每个值使用了错误的索引COLx

而不是

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);
   }
}