Maison >développement back-end >C++ >Pourquoi les comparaisons à virgule flottante sont-elles inexactes et comment puis-je garantir des résultats corrects ?
Confusion de comparaison à virgule flottante
Dans l'extrait de code donné, les vérifications de comparaison entre les nombres à virgule flottante ne sont pas aussi simples qu'on pourrait s'y attendre . Lorsqu'il s'agit de comparaisons à virgule flottante, il est important de comprendre la représentation en virgule flottante et les pièges potentiels qui en découlent.
Les pièges de la virgule flottante
Le problème avec le code réside dans la comparaison de nombres à virgule flottante. Les nombres à virgule flottante sont stockés dans un format binaire qui utilise un nombre fini de bits pour représenter à la fois la grandeur et l'exposant. Cela signifie qu'il existe des limites inhérentes à la précision avec laquelle les nombres à virgule flottante peuvent représenter certaines valeurs, entraînant des erreurs d'arrondi.
Dans le code fourni, les variables a et b sont toutes deux définies comme des flottants. Lors de la comparaison de a à 0,7, le compilateur promeut le float en double pour la comparaison. Ce type de promotion peut entraîner une perte de précision, car la double représentation de a peut ne pas être exactement égale à 0,7. De plus, 0,5 est une puissance exacte de 2, qui peut être représentée précisément au format à virgule flottante.
En conséquence, la comparaison a < 0,7 sera évalué comme vrai en raison de la promotion de a en double et de la représentation imprécise de 0,7. Cela explique la sortie inattendue de « 1 c'est vrai » au lieu du « 0 c'est vrai » attendu.
Assurer des comparaisons correctes
Pour éviter de tels problèmes, il existe deux approches possibles :
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!