为什么在C中添加两个浮点数不正确?
我遇到了两个浮点数的问题。 代码如下:
float a = 30000.0f;
float b = 4499722832.0f;
printf("%fn", a+b);
为什么输出结果是450002816.000000? (正确的应该是450002832.)
浮点数在C中没有完全表示 - 请参见http://en.wikipedia.org/wiki/Floating_point#IEEE_754:_floating_point_in_modern_computers和http://en.wikipedia.org/wiki/Single_precision,因此使用float计算只能给出近似值结果。
这对于较大的值尤其明显,因为可能的差异可以表示为该值的百分比。 在添加/减去两个值的情况下,两者(和结果)的精确度都会更差。
浮点值不能表示所有的整数值。
请记住,单精度浮点数只有24个(或23个,取决于您如何计数)精度位(即有效数字)。 所以随着数值越来越大,你开始失去低端精度,这就是为什么你的计算结果不是很“正确”的原因。
从维基百科
C语言系列中称为“float”的单精度,以及Fortran中的“real”或“real * 4”。 这是一种占用32位(4字节)的二进制格式,其有效位数的精度为24位( 约7位十进制数字 )。
所以你的号码实际上并不适合float
。 您可以使用double
来代替。
上一篇: Why does the addition of two float numbers is incorrect in C?