статистика — C ++ Неправильный расчет стандартного отклонения с использованием std :: аккумулята

Я использую следующий код для расчета стандартного отклонения:

std::vector<float> k = {4,6,2};
float mean = 4;

float sum = std::accumulate(k.begin(), k.end(), 0, [&mean](float x, float y) {
return (y - mean) * (y - mean);
});

float variance = sum / k.size();
float stdev = sqrt(variance);

std::accumulate возвращается 4 когда он должен вернуться:

(4-4)^2 + (6-4)^2 + (2-4)^2 = 8

Кроме того, печать (y - mean) * (y - mean) дает:

0
4
4

Итак, почему он не возвращается 0 + 4 + 4?

2

Решение

Вы не используете параметр x. Попробуйте следующее:

float sum = std::accumulate(k.begin(), k.end(), 0.0F, [&mean](float x, float y) {
return x + (y - mean) * (y - mean);
});

ОБНОВЛЕНИЕ: значение инициализации как float

6

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

Других решений пока нет …

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