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!