Maison  >  Article  >  développement back-end  >  Arithmétique à virgule flottante et associativité en C, C++ et Java

Arithmétique à virgule flottante et associativité en C, C++ et Java

王林
王林avant
2023-08-28 09:09:111182parcourir

Arithmétique à virgule flottante et associativité en C, C++ et Java

En C, C++ et Java, nous utilisons des nombres à virgule flottante pour effectuer certaines opérations mathématiques. Nous allons maintenant vérifier si les nombres à virgule flottante suivent les règles d'associativité.

La réponse est non. Dans certains cas, les nombres à virgule flottante ne suivent pas les règles d'associativité. Nous verrons ici quelques exemples.

Exemple de code

#include<iostream>
using namespace std;
main() {
   float x = -500000000;
   float y = 500000000;
   float z = 1;
   cout << "x + (y + z) is: " << x + (y + z) << endl;
   cout << "(x + y) + z is "<< (x + y) + z << endl;
}

Output

x + (y + z) is: 0
(x + y) + z is 1

Ici on peut voir que les résultats ne sont pas les mêmes, mais en théorie on peut dire qu'ils sont toujours 1. Maintenant, la question se pose, comment cela se fait-il ?

Dans le premier cas, x + (y + z), (500000000 + 1) est en cours d'exécution. Mais pour les nombres à virgule flottante Après arrondi, il est à nouveau converti à 5 000 000 000. Ajoutez maintenant -500000000 et cela devient 0. Dans la deuxième expression, la valeur est (-500000000 + 500000000) = 0, puis 1 est ajouté, donc le résultat final Le résultat est 1.

Si nous utilisons des nombres entiers, les deux expressions renverront le même résultat, qui est 1.

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer