C++使用std :: accumulate计算错误的标准差

Dim*_*htz 2 c++ statistics standard-deviation accumulate

我使用以下代码来计算标准差:

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);
Run Code Online (Sandbox Code Playgroud)

std::accumulate4应该返回时返回:

(4-4)^2 + (6-4)^2 + (2-4)^2 = 8
Run Code Online (Sandbox Code Playgroud)

此外,印刷(y - mean) * (y - mean)给出:

0
4
4
Run Code Online (Sandbox Code Playgroud)

那么,它为什么不回归0 + 4 + 4呢?

EFe*_*nix 7

您不使用x参数.请尝试以下方法:

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

UPDATE:init值为float