время выполнения — среднее и среднеквадратичное отклонение C ++, возвращающее те же странные обозначения

Я работаю над двумя функциями для вычисления среднего абсолютного отклонения и медианного абсолютного отклонения набора векторных данных. Я использую перегруженную функцию 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);

}

Кто-нибудь может определить что-то, что не так? Благодарю.

0

Решение

Обе функции возвращают ноль с некоторой ошибкой округления.

Запишите алгебраическое выражение для значений, которые вы пытаетесь вычислить, и сравните это с вашим кодом.

Я не знаю, что делает calcAverage, но оно не перегружено; Вы называете это с vector<double> оба раза. Нет способа рассчитать как среднее, так и медиану.

Подсказка: вы, кажется, пропустили значения абсолютный а также медиана

2

Другие решения

Медианное абсолютное отклонение (MAD) рассчитывается как медиана абсолютного значения каждого значения вектора минус медиана всех элементов. Так что вы должны предоставить в своем коде сортировку ()
функция для векторных элементов, чтобы найти медиану значений и использовать fabs () для вычисления различий
это должно быть отсортировано снова.

0

По вопросам рекламы [email protected]