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

L'addition à virgule flottante est-elle associative ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-25 17:16:13313parcourir

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

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!

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