0
float f = 3.4028235E38F;

会编译得很好但是

float f = 3.4028235E38;

抛出此错误:

 possible loss of precision

在这段代码中:

http://ideone.com/0Hu3dA

我本来期望正好相反,因为浮点文字默认是双精度的,应该更精确。

4

1 回答 1

4

因为浮点数默认是 type double。要使其成为浮点数,您需要附加一个F. 您在以下作业中遇到错误:

float f = 3.4028235E38;

因为精度比浮点数高一倍。因此,可能会损失精度。

我本来期望正好相反,因为浮点文字默认是双精度的,应该更精确。

让我们检查您的数字的二进制表示,直到双精度:

0x47EFFFFFE54DAFF8 =    01000111 11101111 11111111 11111111 
                        11100101 01001101 10101111 11111000

现在因为float是单精度 32 位浮点值。它不能存储所有双精度值,即双精度 64 位浮点值。

于 2013-09-13T14:03:28.603 回答