2016-07-21 2 views
2

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

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?

ответ

6

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

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

UPDATE: значение инициализации, как поплавок

+1

Итак, вот почему он на самом деле вернулся только последнее значение. большое спасибо – DimChtz