Maison  >  Article  >  développement back-end  >  Pourquoi la comparaison d'un float et d'un double avec la même valeur renvoie-t-elle faux ?

Pourquoi la comparaison d'un float et d'un double avec la même valeur renvoie-t-elle faux ?

DDD
DDDoriginal
2024-10-31 15:40:56475parcourir

Why Does Comparing a Float and a Double With the Same Value Return False?

Résultat inattendu lors de la comparaison de Double et Float

La comparaison entre une variable float f et une variable double d avec la même valeur 1.1 renvoie étonnamment FAUX. Ce résultat inattendu découle des caractéristiques fondamentales des nombres à virgule flottante.

Précision et arrondi des nombres à virgule flottante

Nombres à virgule flottante, y compris les types flottants et doubles , ont des limites inhérentes :

Précision : Les nombres à virgule flottante représentent des nombres réels dans une limite finie de chiffres significatifs. Les valeurs nécessitant plus de précision que ce que le type de données peut gérer entraîneront des représentations tronquées.

Arrondi : Les nombres binaires n'ont pas toujours des représentations décimales exactes. Lors de la conversion binaire en décimal, un arrondi se produit pour s'adapter à la précision limitée des types à virgule flottante.

Impact sur les comparaisons

En raison de ces facteurs, les valeurs flottantes et doubles sont sous réserve d’erreurs d’arrondi. Ces erreurs peuvent entraîner des divergences lors de la comparaison de deux nombres qui devraient être égaux. Dans l'exemple donné, les représentations float et double de 1.1 présentent de légères variations dues à l'arrondi, ce qui donne le résultat contre-intuitif de f != d.

Bonne pratique

Évitez les comparaisons directes d’égalité entre les nombres à virgule flottante. Optez plutôt pour évaluer la différence absolue entre les valeurs et la comparer à un seuil acceptable (epsilon) :

if (abs(x - y) < epsilon) { ... }

Cette approche prend en compte les inexactitudes inhérentes aux opérations en virgule flottante et fournit un moyen plus fiable de déterminer si deux valeurs sont essentiellement égales.

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