人们如何处理ANSI C中的浮点不准确?在这种情况下,预期结果为4.305,但ANSI C还会返回0.000001?
#include<stdio.h>
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
Run Code Online (Sandbox Code Playgroud)
我的想法是,这必须是一个常见的问题,所以有一个标准的lib来处理这个或人们将这些转换为整数,进行计算,然后将它们转换回来?有人能否就成功的"实践"策略提供一些见解?
这与ANSI C无关,而与浮点运算有关.
您应该阅读:"每个计算机科学家应该知道的关于浮点算术的内容" http://www.math.umd.edu/~jkolesar/mait613/floating_point_math.pdf
为了给出不充分的总结,浮点运算不是神奇的无限精度机制 - 它是使用小的(通常为32或64)位数表示无限实数集的近似方式.它以二进制形式工作,而不是十进制,并且二进制中精确表示的分数与十进制中可精确表示的分数不同.舍入是一个问题,浮点数之间的间隔也是如此.
无论如何,如果你是一名工作程序员,你真的应该阅读上面的论文.在Stack Overflow的几个段落中可以描述的远不止这个,主题非常重要.