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 ?

Pourquoi la comparaison des valeurs « float » et « double » renvoie-t-elle parfois « false » même lorsqu'elles semblent identiques ?

Barbara Streisand
Libérer: 2024-11-01 18:19:30
original
760 Les gens l'ont consulté

Why does comparing `float` and `double` values sometimes return `false` even when they appear identical?

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

  • Précision : Les nombres à virgule flottante stockent un nombre limité de chiffres , qui détermine l'exactitude des valeurs qu'ils peuvent représenter. Certains nombres, comme 1/3 en décimal, ont une représentation décimale infinie et ne peuvent pas être stockés exactement sans perdre en précision.
  • Arrondi : Lorsqu'une valeur à virgule flottante est convertie en binaire, il se peut qu'il ne soit pas en mesure de représenter exactement certaines valeurs décimales. Par exemple, 0,1 en décimal est représenté en binaire comme une séquence infinie de chiffres. En conséquence, les nombres à virgule flottante sont arrondis pour s'adapter à leurs nombres.

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)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal