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!