float f = 3.4028235E38F;
编译正常,但
float f = 3.4028235E38;
抛出此错误:
possible loss of precision
在此代码中:
我原本期望相反,因为浮点文字默认为double,应该更精确。
答案 0 :(得分:4)
因为浮点数默认为double
类型。要使它成为浮点数,请附加F
。您在以下作业中收到错误:
float f = 3.4028235E38;
因为double比float更精确。因此,可能会损失精确度。
我原本期望相反,因为浮点文字默认为double,应该更精确。
让我们检查你的数字的二进制表示,直到双精度:
0x47EFFFFFE54DAFF8 = 01000111 11101111 11111111 11111111
11100101 01001101 10101111 11111000
现在float
是单精度32位浮点值。它不能存储所有双精度值,即双精度64位浮点值。