"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment comparer les valeurs de virgule flottante avec précision tout en tenant compte de la perte de précision?

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

Publié le 2025-03-24
Parcourir:112

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

Comparaison des valeurs de point flottante avec la conservation de précision

La comparaison du point flottant pose un défi dû à la perte de précision. Comparaison simplement des doubles ou des flotteurs à l'aide de == n'est pas fiable.

Comparaison basée sur Epsilon

Une approche implique l'utilisation d'un seuil d'Epsilon (ε) pour compter pour la perte de précision:

bool CompareDoubles2(double A, double B) {
  double diff = A - B;
  return (diff  

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 présumant a == b et b == c implique a == c.
  • en utilisant le même epsilon pour différentes unités de mesure.
  • Fonction.
Epsilon standard

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 uniquement si les valeurs attendues sont inférieures à 1.

Les conséquences de l'arithmétique entier

en utilisant des doubles pour maintenir les valeurs entières peuvent conduire à une arithmétique correcte, tant que les fractions ou les valeurs en dehors de la plage d'un entier sont étendues. Par exemple, 4.0 / 2.0 sera égal à 1,0 1.0.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3