ANSI C浮点计算不准确

时间:2012-02-27 17:18:59

标签: c floating-point

人们如何处理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

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

1 个答案:

答案 0 :(得分:7)

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

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

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

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