我正在研究两个函数来计算 vector 数据集的平均绝对偏差和中值绝对偏差。我在其中使用了一个重载的 calcAverage 函数。问题是,我为两个函数调用返回了相同的错误值。
这是输出。它是给我科学记数法还是什么?
Mean absolute deviation = 4.09929e-016
Median absolute deviation = 4.09929e-016
这是平均绝对分布函数:
double calcMeanAD(vector<int> data_set){
vector<double> lessMean;
double mean = calcAverage(data_set);
for (auto it = data_set.begin(); it != data_set.end(); ++it){
lessMean.push_back(*it);
}
for (auto it = lessMean.begin(); it != lessMean.end(); ++it){
*it -= mean;
}
return calcAverage(lessMean);
}
这是中位数绝对分布函数:
double calcMedAD(vector<int> data_set){
vector<double> lessMed;
double median = calcAverage(data_set);
for (auto it = data_set.begin(); it != data_set.end(); ++it){
lessMed.push_back(static_cast<double>(*it));
}
for (auto it = lessMed.begin(); it != lessMed.end(); ++it){
*it -= median;
}
return calcAverage(lessMed);
}
任何人都可以发现错误的地方吗?谢谢。
最佳答案
这两个函数都返回零并带有一些舍入误差。
写下您要计算的值的代数表达式,并将其与您的代码进行比较。
我不知道 calcAverage 做了什么,但它没有重载;你用 vector<double>
来调用它两次。它无法同时计算平均值和中位数。
提示:你似乎忽略了绝对和中位数的含义
关于C++ 均值和中值绝对偏差返回相同的奇怪符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21792541/