statistics - C++ Incorrect standard deviation calculation using std::accumulate -


i use following code calculate standard deviation:

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 returns 4 when should return:

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

furthermore, printing (y - mean) * (y - mean) gives:

0 4 4 

so, why doesn't return 0 + 4 + 4?

you not use x parameter. try following:

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

update: init value float


Comments