2016-07-21 5 views
2

ich den folgenden Code verwenden Standardabweichung zu berechnen:C++ Falsche Standardberechnung Abweichung mit std :: akkumulieren

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 kehrt 4, wenn sie zurückkehren sollte:

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

Des Weiteren Druck (y - mean) * (y - mean) gibt :

0 
4 
4 

Also, warum gibt es nicht 0 + 4 + 4 zurück?

Antwort

6

Sie verwenden den Parameter x nicht. Versuchen Sie Folgendes:

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

UPDATE: init Wert als float

+1

Also, das ist, warum es eigentlich nur den letzten Wert zurückgegeben. Vielen Dank – DimChtz

Verwandte Themen