ANSI C浮点计算不准确

Dan*_*ohn 0 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
Run Code Online (Sandbox Code Playgroud)

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

Per*_*rry 7

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

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

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

无论如何,如果你是一名工作程序员,你真的应该阅读上面的论文.在Stack Overflow的几个段落中可以描述的远不止这个,主题非常重要.