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
585 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!

source:php.cn
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