ANSI C浮点计算不准确

人们如何处理ANSI C中的浮点不准确? 在这种情况下,预期结果为4.305,但ANSI C还会返回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 

我的想法是,这必须是一个常见的问题,所以有一个标准的lib来处理这个或人们将这些转换为整数,进行计算,然后将它们转换回来? 有人能否对成功的“实践”策略提供一些见解?

这与ANSI C无关,而与浮点运算有关。

您应该阅读:“每个计算机科学家应该知道浮点算术的内容” http://www.math.umd.edu/~jkolesar/mait613/floating_point_math.pdf

为了给出不充分的总结,浮点运算不是神奇的无限精度机制 – 它是使用较小(通常为32或64)位数表示无限实数集的近似方式。 它以二进制forms工作,而不是十进制,并且二进制中可准确表示的分数与十进制中可精确表示的分数不同。 舍入是一个问题,浮点数之间的间隔也是如此。

无论如何,如果你是一名工作程序员,你真的应该阅读上面的论文。 除了可以在Stack Overflow上的几个段落中描述之外,还有更多内容,这个主题非常重要。