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
Post a Comment