Maison > développement back-end > C++ > L'addition à virgule flottante est-elle associative ?

L'addition à virgule flottante est-elle associative ?

Mary-Kate Olsen
Libérer: 2024-12-25 17:16:13
original
307 Les gens l'ont consulté

Is Floating-Point Addition Associative?

L'associativité de l'arithmétique à virgule flottante

Dans le domaine de la programmation, les nombres à virgule flottante sont couramment utilisés pour représenter des valeurs réelles. Cependant, les opérations fondamentales d'addition et de multiplication sur ces valeurs à virgule flottante peuvent ne pas toujours se comporter comme prévu.

Une question qui se pose souvent est de savoir si l'addition et la multiplication à virgule flottante sont associatives. L'associativité implique que l'ordre dans lequel les opérandes sont ajoutés ou multipliés n'affecte pas le résultat final. Bien que la multiplication soit effectivement associative pour les nombres à virgule flottante, l'addition ne l'est pas.

Ce manque d'associativité devient apparent en observant le code suivant :

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

Ce comportement déroutant découle de l'imprécision inhérente de nombres à virgule flottante. Lors de l'ajout de plusieurs nombres, l'ordre dans lequel les additions sont effectuées peut conduire à des résultats légèrement différents en raison d'erreurs d'arrondi.

L'article fondateur « Ce que tout informaticien devrait savoir sur l'arithmétique à virgule flottante » clarifie ce problème :

"Une autre zone grise concerne l'interprétation des parenthèses. En raison d'erreurs d'arrondi, les lois associatives de l'algèbre ne s'appliquent pas nécessairement aux nombres à virgule flottante. Par exemple, le l'expression (x y) z a une réponse totalement différente de x (y z) lorsque x = 1e30, y = -1e30 et z = 1 (c'est 1 dans le premier cas, 0 dans le second). Par conséquent, il faut être prudent lorsqu’on s’appuie sur l’associativité de l’addition à virgule flottante. L'ordre dans lequel les opérandes sont ajoutés peut modifier subtilement le résultat, entraînant des comportements inattendus.

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