Dans les implémentations typiques en virgule flottante, le résultat d'une seule opération est produit comme si l'opération avait été effectuée avec une précision infinie, puis arrondie au nombre à virgule flottante le plus proche.
Comparer et : Le résultat de chaque opération effectuée avec une précision infinie est le même, donc ces résultats de précision infinie identiques sont arrondis de manière identique. En d'autres termes, l'addition en virgule flottante est commutative.b + aa + bb + a
Prenez : est un nombre à virgule flottante. Avec les nombres à virgule flottante binaires , est également un nombre à virgule flottante (l'exposant est plus grand de un), donc est ajouté sans aucune erreur d'arrondi. Ensuite, est ajouté à la valeur exacte . Le résultat est la valeur exacte , arrondie au nombre à virgule flottante le plus proche.b 2 b b + b a b + b 2 b + ab + b + ab2 bb + buneb + b2 b + a
Prenez : a + b est ajouté, et il y aura une erreur d'arrondi r , donc nous obtenons le résultat a + b + r . Ajoutez b et le résultat est la valeur exacte 2 b + a + r , arrondie au nombre à virgule flottante le plus proche.a + b + ba + bra + b + rb2 b + a + r
Donc dans un cas, , arrondis. Dans l'autre cas, 2 b + a + r , arrondis.2 b + a2 b + a + r
PS. Que pour deux nombres particuliers et b les deux calculs donnent ou non le même résultat dépend des nombres et de l'erreur d'arrondi dans le calcul a + b , et est généralement difficile à prévoir. L'utilisation de la précision simple ou double ne fait aucune différence en principe avec le problème, mais comme les erreurs d'arrondi sont différentes, il y aura des valeurs de a et b où en précision simple les résultats sont égaux et en double précision ils ne le sont pas, ou vice versa. La précision sera beaucoup plus élevée, mais le problème que deux expressions sont mathématiquement identiques mais pas identiques en arithmétique à virgule flottante reste le même.uneba + b
PPS. Dans certaines langues, l'arithmétique à virgule flottante peut être effectuée avec une précision supérieure ou une plage de nombres supérieure à celle donnée par les instructions réelles. Dans ce cas, il serait beaucoup plus probable (mais toujours pas garanti) que les deux sommes donnent le même résultat.
PPPS. Un commentaire a demandé si nous devrions demander si les nombres à virgule flottante sont égaux ou pas du tout. Absolument si vous savez ce que vous faites. Par exemple, si vous triez un tableau ou implémentez un ensemble, vous vous retrouvez dans de terribles ennuis si vous voulez utiliser une notion "approximativement égale". Dans une interface utilisateur graphique, vous devrez peut-être recalculer la taille des objets si la taille d'un objet a changé - vous comparez oldSize == newSize pour éviter ce recalcul, sachant qu'en pratique vous n'avez presque jamais de tailles presque identiques et que votre programme est correct même s'il y a un recalcul inutile.