我遇到了两个浮点数相加的问题。代码如下:
float a = 30000.0f;
float b = 4499722832.0f;
printf("%f\n", a+b);
为什么输出结果是450002816.000000?(正确的应该是450002832。)
我遇到了两个浮点数相加的问题。代码如下:
float a = 30000.0f;
float b = 4499722832.0f;
printf("%f\n", a+b);
这在处理较大数值时尤其明显,因为可能的误差可以表示为该值的百分比。若要对两个值进行加减运算,则会得到两者及结果中最差的精度。
浮点数无法表示所有的整数值。
请记住,单精度浮点数只有24(或23,具体取决于如何计算)位精度(即有效数字)。因此随着值变得越来越大,您开始失去低端精度,这就是为什么您计算结果不太“正确”的原因。
引自维基百科
单精度浮点数在C语言家族中被称为“float”,在Fortran中被称为“real”或“real*4”。它是一种二进制格式,占用32位(4字节),其有效数字的精度为24位(约7位十进制数字)。
因此,您的数字实际上无法适应于float
。 您可以使用double
代替。
float
。除非你有充分的理由不这样做,否则请使用 double
。 - Daniel
float
不够精确,无法保存像b
这样大的数字中的所有位数。请改用double
或long double
。 - Tom Zych