2014-02-14 23 views
0

我正在处理两个函数来计算矢量数据集的平均绝对偏差和中位数绝对偏差。我在里面使用了一个重载的calcAverage函数。问题是,我为这两个函数调用返回相同的错误值。C++平均和中位数绝对偏差返回相同的奇怪符号

这是输出。它是否给了我科学记数法?

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

} 

有谁能够现场的东西/ s的是/是错误的?谢谢。

+1

您在两个函数中都做了同样的事情 - 您如何期待不同的结果? – AlexT

+0

我明白了,谢谢。 – CanadaIT

回答

2

这两个函数都返回零,出现一些舍入错误。

记下您正在尝试计算的值的代数表达式,并将其与您的代码进行比较。

我不知道calcAverage做了什么,但没有超载;你两次都用vector<double>来称呼它。无法计算均值和中位数。

提示:你似乎已经错过了绝对位的含义

+0

谢谢。我会仔细看看并报告。 – CanadaIT

0

中位数绝对偏差(MAD)的计算公式为载体的每个值减去的平均绝对值的中位数所有元素。因此,您应该提供代码向量元素的排序() 函数以查找值的中位数,并使用fab()来计算应该再次排序的差异 。