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
Libérer: 2024-11-19 04:15:02
original
179 Les gens l'ont consulté

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
Copier après la connexion

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)
        ...
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal