ANSI C inexactitude du calcul en virgule flottante

Comment les personnes traitent-elles l’inexactitude de la virgule flottante dans ANSI C? Dans ce cas, le résultat attendu est de 4,305, mais le code ANSI C renvoie une valeur supplémentaire de 0,000001?

#include main() { float _lcl1=66.3; float _ucl1=76; float lbl1 = 0; float ubl1 = 0; lbl1 = (_lcl1 - 2.5 * (_ucl1 - _lcl1)); printf ("%e\n",lbl1); } 4.205001e+01 

Les idées que j’ai sont que cela doit être un problème commun donc il y a une bibliothèque standard pour traiter ceci ou les gens convertissent ceux-ci en entiers, font le calcul, puis les reconvertissent Quelqu’un peut-il fournir des informations sur une stratégie réussie “en pratique”?

Cela n’a rien à voir avec ANSI C et tout ce qui concerne l’arithmétique en virgule flottante.

Vous devriez lire: “Ce que tout informaticien devrait savoir sur l’arithmétique en virgule flottante” http://www.math.umd.edu/~jkolesar/mait613/floating_point_math.pdf

Pour donner un résumé inadéquat, l’arithmétique en virgule flottante n’est pas un mécanisme magique de précision infinie, c’est une façon approximative de représenter un ensemble infini de nombres réels à l’aide d’un petit nombre de bits (généralement 32 ou 64). Il fait son travail en binary, pas en décimal, et les fractions exactement représentables en binary ne sont pas les mêmes que celles exactement représentables en décimal. L’arrondi est un problème, de même que l’intervalle entre les flottants.

Quoi qu’il en soit, vous devriez vraiment lire le document ci-dessus si vous êtes un programmeur actif. Il y a beaucoup plus à cela que ce que l’on peut décrire dans quelques paragraphes sur le débordement de stack et le sujet est très important.