Maison > développement back-end > C++ > Comment comparer avec précision les valeurs à virgule flottante tout en tenant compte de la perte de précision ?

Comment comparer avec précision les valeurs à virgule flottante tout en tenant compte de la perte de précision ?

Susan Sarandon
Libérer: 2024-12-25 07:48:33
original
798 Les gens l'ont consulté

How Can Floating-Point Values Be Compared Accurately While Accounting for Precision Loss?

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

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 :

  • En supposant que a == b et b == c implique a == c.
  • Utiliser le même epsilon pour différentes unités de mesure.
  • Utilisation d'epsilon pour les angles et les longueurs de ligne.
  • Tri à l'aide d'une telle comparaison function.

Standard Epsilon

std::numeric_limits::epsilon() représente la différence entre 1,0 et la valeur suivante représentable par un double . Il peut être utilisé dans les fonctions de comparaison, mais seulement si les valeurs attendues sont inférieures à 1.

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!

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