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
Barbara Streisandoriginal
2024-11-01 18:19:30762parcourir

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)

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:
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