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
Libérer: 2024-12-29 06:17:15
original
628 Les gens l'ont consulté

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
Copier après la connexion

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)
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal