我试图找到二维数组中所有列的平均值,并将它们存储到一维数组中。
从那个1D数组中,我想返回最小数字的位置。
这是我的代码,它确实会产生一个答案(没有编译/运行时错误),但是它给出的答案是不正确的。

int function(){
    int m, n,p;
    for(m = 0; m < NROW; m++){//I think the problem must be within this set of for loops.
        for(n = 0; n < NCOL; n++){
            averages[n] += twoD[n][m]; //averages is an array of type double
        }
    }

    for(p = 0; p < NCOL; p++){
        averages[p] = (((double)averages[p])/((double)NROW));
    }

    int d, location;
    int lowest = averages[0];
    for ( d = 1 ; d < NCOL ; ++d )
        {
            if ( averages[d] < lowest )
            {
               lowest = averages[d];
               location = d;
            }
        }
return location;
}

最佳答案

您没有显示您将averages初始化为0

for(n = 0; n < NCOL; n++){
    averages[n] = 0.;
    for(m = 0; m < NROW; m++){
        averages[n] += twoD[n][m]; //averages is an array of type double
    }
}

精度的另一个问题(但我不认为是双值的情况)是,当计算平均值与第一个GESS几乎没有方差的平均值时更准确,然后计算:avg(X) = x1 + avg(X - x1)在哪里x1是对avg(X)的猜测。

08-17 03:23