Maison >développement back-end >C++ >Pourquoi la comparaison des valeurs « float » et « double » renvoie-t-elle parfois « false » même lorsqu'elles semblent identiques ?
Résultats inattendus lors de la comparaison des types de données doubles et flottants
Lors de la comparaison de nombres à virgule flottante double précision (double) à des nombres à virgule flottante simple précision nombres (flottant), vous pouvez rencontrer des résultats inattendus. Plus précisément, la vérification d'égalité (f == d) entre une variable flottante f et une variable double d peut renvoyer faux même si les deux valeurs semblent identiques.
Ce comportement découle de deux facteurs fondamentaux associés au flottant- nombres à points : précision et arrondi.
Erreurs de précision et d'arrondi
Implications pour les contrôles d'égalité
La précision et l'arrondi inhérents aux nombres flottants les nombres de points peuvent entraîner des erreurs d’arrondi, en particulier lors de la comparaison de valeurs très proches les unes des autres. Ces erreurs s'accumulent, provoquant l'échec de la comparaison d'égalité. Cela rend la vérification directe de l'égalité des nombres à virgule flottante peu fiable et sujette aux faux négatifs.
Solution : comparaison avec un Epsilon
Au lieu d'utiliser des vérifications d'égalité, un plus fiable La méthode pour comparer les nombres à virgule flottante consiste à prendre la différence absolue entre eux et à vérifier si elle est inférieure à une petite valeur appelée epsilon (ε). Cela vous permet de prendre en compte les erreurs d'arrondi et de déterminer si la différence est insignifiante pour votre application.
if (abs(x - y) < epsilon)
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!