为什么在C中添加两个浮点数是不正确的?

Hen*_* Li 2 c floating-point

我有一个问题,添加两个浮点数.代码如下:

float a = 30000.0f;
float b = 4499722832.0f;

printf("%f\n", a+b);
Run Code Online (Sandbox Code Playgroud)

为什么输出结果是450002816.000000?(正确的应该是450002832.)

Ofi*_*fir 7

Float没有在C中完全表示 - 请参阅http://en.wikipedia.org/wiki/Floating_point#IEEE_754:_floating_point_in_modern_computershttp://en.wikipedia.org/wiki/Single_precision,因此使用float进行计算只能给出近似值结果.

这对于较大的值尤其明显,因为可能的差异可以表示为值的百分比.在添加/减去两个值的情况下,两者(和结果)的精度都会更差.

  • 它与C本身并没有任何关系 - 浮点数一般不能准确代表其范围内的每个数字.这是浮点数的整体思想所固有的. (3认同)