Écart type en une passe

On a souvent besoin de calculer quelques statistiques sur un ensemble de données. Si calculer la moyenne en une passe est trivial, le calcul de l’écart type demande un peu d’attention. Ci-dessous, une solution que je poste comme pense-bête.

Le snippet calcule aussi les valeurs min et max.

Code snippet :

[pastacode provider= »manual » lang= »c++ » message= »Écart type en une passe » manual= »std%3A%3Avector%3Cint%3E%20vec%3B%20%20%20%2F%2F%20Container%20with%20values%0Auint64_t%20count%20%20%3D%200%20%3B%20%20%20%20%20%0Auint64_t%20accu%20%20%20%3D%200%20%3B%20%20%20%20%20%0Auint64_t%20accu2%20%20%3D%200%20%3B%0Auint64_t%20min%20%20%20%20%3D%20-1%3B%0Auint64_t%20max%20%20%20%20%3D%200%20%3B%0A%0Afor_each(begin(vec)%2C%20end(vec)%20%5B%26%5D(int%20x)%0A%7B%0A%20%20%20%20accu%20%2B%3D%20x%3B%0A%20%20%20%20accu2%20%2B%3D%20%20x%20*%20x%3B%0A%20%20%20%20min%20%3D%20(std%3A%3Amin)(min%2C%20x)%3B%0A%20%20%20%20max%20%3D%20(std%3A%3Amax)(max%2C%20x)%3B%0A%20%20%20%20%2B%2Bcount%3B%0A%7D)%3B%0A%0Afloat%20average%20%3D%20accu%2Ffloat(count)%3B%0Afloat%20stdev%20%3D%20sqrt(accu2*count%20-%20accu*accu)%2Fcount%3B »/]

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *