Équilibre des points flottants et tolérances

De la comparaison de deux nombre à virgule flottante par quelque chose comme a_float == b_float est à la recherche d'ennuis depuis a_float /3.0 * 3.0 pourrait ne pas être égale à a_float due à l'arrondi erreur.

Ce que l'on fait normalement c'est quelque chose comme fabs(a_float - b_float) < tol.

Comment peut-on calculer tol?

Idéalement, la tolérance doit être juste un peu plus grande que la valeur de l'une ou des deux, le moins de chiffres significatifs. Donc, si le seul nombre à virgule flottante est d'utiliser tol = 10E-6 devrait être sujet de droit. Toutefois, cela ne fonctionne pas bien pour le cas général où a_float pourrait être très petite ou peut-être très grande.

Comment peut-on calculer tol correctement pour tous les cas? Je suis intéressé en C ou C++ cas particulier.

source d'informationauteur doron | 2013-07-01