Comparaison de valeurs à virgule flottante avec conservation de précision
La comparaison à virgule flottante pose un défi en raison de la perte de précision. Comparer simplement des doubles ou des flottants à l'aide de == n'est pas fiable.
Comparaison basée sur Epsilon
Une approche consiste à utiliser un seuil epsilon (ε) pour tenir compte de la perte de précision :
bool CompareDoubles2(double A, double B) { double diff = A - B; return (diff < EPSILON) && (-diff < EPSILON); }
Cependant, cette approche peut être inefficace.
Considérations dépendantes du contexte
Le choix de la méthode de comparaison dépend du contexte et des valeurs attendues. Considérez les pièges potentiels suivants :
Standard Epsilon
std::numeric_limits Conséquences de l'arithmétique entière L'utilisation de doubles pour contenir des valeurs entières peut conduire à corriger arithmétique, à condition d'éviter les fractions ou les valeurs en dehors de la plage d'un nombre entier. Par exemple, 4,0/2,0 sera égal à 1,0 1,0. 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!