Maison >développement back-end >C++ >Pourquoi l'addition à virgule flottante produit-elle des résultats différents selon l'ordre des opérations ?

Pourquoi l'addition à virgule flottante produit-elle des résultats différents selon l'ordre des opérations ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-29 06:17:15613parcourir

Why Does Floating-Point Addition Produce Different Results Depending on the Order of Operations?

Associativité en arithmétique à virgule flottante

L'arithmétique à virgule flottante est utilisée pour représenter des nombres réels en informatique. En raison d'erreurs d'arrondi internes, l'associativité des opérations à virgule flottante peut être discutable.

Problème :

Considérez le code suivant qui ajoute trois nombres à virgule flottante et compare leur somme à 1 :

cout << ((0.7 + 0.2 + 0.1) == 1) << endl;     //output is 0
cout << ((0.7 + 0.1 + 0.2) == 1) << endl;     //output is 1

Pourquoi ces expressions produisent-elles des résultats ?

Réponse :

L'addition à virgule flottante n'est pas garantie d'être associative. Changer l'ordre dans lequel les nombres sont ajoutés peut modifier le résultat en raison d'erreurs d'arrondi.

Selon l'article « Ce que tout informaticien devrait savoir sur l'arithmétique à virgule flottante », même les parenthèses dans une expression peuvent avoir un impact sur le résultat. . Par exemple, les expressions suivantes produisent des valeurs différentes :

(x+y)+z
x+(y+z)

où x = 1e30, y = -1e30 et z = 1. La première expression est évaluée à 1, tandis que la seconde est évaluée à 0.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn