11.8.2.3 : Calcul de variance
Le calcul de la variance est un exemple canonique de "catastrophic cancellation" dans la mesure où c'est une différence de carrés. Considérons la variance d'une population de $N$ individus. $$\begin{eqnarray*} \sigma^2={\overline {(x-{\bar {x}})^2}}={\overline {(x^2)}}-{\bar {x}}^2= {\frac {\sum _{i=1}^{N}x_{i}^2-(\sum _{i=1}^{N}x_{i})^2/N}{N}}.\! \end{eqnarray*}$$ La règle d'or pour les jeunes physiciens était "ne jamais calculer une variance en simple précision"... noteMalgré tout cette faute a été observée y compris dans des programmes d'expériences auprès du LHC. La variance ainsi calculée pouvant devenir négative, elle apparaît soudain au grand jour, lorsqu'on en extrait une racine carrée. Mais si ce phénomène ne se manifeste qu'en production, ses conséquences peuvent être pénibles.Bien sûr, une approche en deux passes, lorsqu'elle est possible, permet de rester en simple précision. On peut également exploiter l'algorithme de~Welford en une seule passe. Le coût de la précision est alors une division supplémentaire à chaque tour de boucle.
Le problème existe également dans l'évaluation des matrices de covariance et dans l'évaluation des moments centrés d'ordres plus élevés d'une distribution.