Maison >développement back-end >C++ >Quand est-il sûr d'utiliser l'opérateur d'égalité pour les comparaisons à virgule flottante ?

Quand est-il sûr d'utiliser l'opérateur d'égalité pour les comparaisons à virgule flottante ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-19 04:15:02180parcourir

When is it Safe to Use the Equality Operator for Floating-Point Comparisons?

Quand la comparaison à virgule flottante est-elle acceptable ?

En programmation, comparer des nombres à virgule flottante avec l'opérateur d'égalité (= =) est généralement découragés en raison des inexactitudes inhérentes à leur représentation. Cependant, il existe des scénarios limités dans lesquels de telles comparaisons peuvent être considérées comme fiables.

Représentations exactes d'entiers

IEEE 754, la norme largement adoptée pour l'arithmétique à virgule flottante, garantit que les représentations flottantes d'entiers dans une plage spécifique sont exactes. Par conséquent, les nombres entiers, y compris zéro, peuvent être comparés à l'aide de l'opérateur d'égalité.

Exemple :

float a = 1.0;
float b = 1.0;
a == b; // True

Constantes intégrales

L'utilisation de constantes définies comme const double statique, comme la constante BAR dans l'exemple de code, garantit que la valeur est représentée comme une virgule flottante exacte nombre. Ainsi, comparer une variable avec une telle constante à l'aide de l'opérateur d'égalité produira toujours le résultat correct.

Exemple :

static const double BAR = 3.14;
void foo(double d)
{
    if (d == BAR)
        ...
}

Dans ce cas, foo(BAR ) sera toujours évalué à vrai, en supposant qu'aucun autre calcul ou opération ne modifie la variable d.

Attention Notes

Bien que les comparaisons d'entiers à virgule flottante soient généralement fiables, la prudence est toujours de mise.

  • Assurez-vous que les nombres que vous comparez sont véritablement des nombres entiers dans la plage représentable. .
  • Évitez d'utiliser des comparaisons d'égalité sur les résultats en virgule flottante issus de calculs ou de conversions.
  • Envisagez en utilisant des entiers ou des bibliothèques spécialisées pour精确比较si nécessaire.

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