Le dépassement de capacité, en virgule flottante, x + x + x
est exactement le nombre à virgule flottante correctement arrondi (c'est-à-dire le plus proche) du réel 3 * x
, x + x + x + x
est exactement 4 * x
, et x + x + x + x + x
est à nouveau l'approximation à virgule flottante correctement arrondie pour 5 * x
.
Le premier résultat, car x + x + x
, vient du fait que x + x
c'est exact. x + x + x
est donc le résultat d'un seul arrondi.
Le second résultat est plus difficile, une démonstration en est discutée ici (et Stephen Canon fait allusion à une autre analyse de preuve par cas sur les 3 derniers chiffres de x
). Pour résumer, soit 3 * x
est dans le même binade que 2 * x
soit il est dans le même binade que 4 * x
, et dans chaque cas il est possible de déduire que l'erreur sur le troisième ajout annule l'erreur sur le deuxième addition (le premier ajout étant exact, comme nous l'avons déjà dit).
Le troisième résultat, « x + x + x + x + x
est correctement arrondi», dérive du second de la même manière que le premier dérive de l'exactitude de x + x
.
Le deuxième résultat explique pourquoi 0.1 + 0.1 + 0.1 + 0.1
est exactement le nombre à virgule flottante 0.4
: les nombres rationnels 1/10 et 4/10 sont approximés de la même manière, avec la même erreur relative, lorsqu'ils sont convertis en virgule flottante. Ces nombres à virgule flottante ont un rapport d'exactement 4 entre eux. Le premier et le troisième résultat montrent que 0.1 + 0.1 + 0.1
et que l' 0.1 + 0.1 + 0.1 + 0.1 + 0.1
on peut s'attendre à avoir moins d'erreur que ce qui pourrait être déduit par une analyse d'erreur naïve, mais, en eux-mêmes, ils ne relient que les résultats respectivement à 3 * 0.1
et 5 * 0.1
, dont on peut s'attendre à ce qu'ils soient proches mais pas nécessairement identiques à 0.3
et 0.5
.
Si vous continuez à ajouter 0.1
après la quatrième addition, vous observerez finalement des erreurs d'arrondi qui font que « 0.1
ajouté à lui-même n fois» diverge n * 0.1
et diverge encore plus de n / 10. Si vous deviez tracer les valeurs de «0,1 ajouté à lui-même n fois» en fonction de n, vous observeriez des lignes de pente constante par binades (dès que le résultat de la nième addition est destiné à tomber dans un binade particulier, on peut s'attendre à ce que les propriétés de l'addition soient similaires aux ajouts précédents qui ont produit un résultat dans le même binade). Dans un même binade, l'erreur augmentera ou diminuera. Si vous regardiez la séquence des pentes de binade à binade, vous reconnaîtriez les chiffres répétés de0.1
en binaire pendant un moment. Après cela, l'absorption commencerait à se produire et la courbe deviendrait plate.