我知道浮点数是如何表示的,但是还不够,我害怕.
一般问题是:
对于给定的精度(对于我的目的,基数10中的精确小数位数),可以为16位,32位和64位IEEE-754系统表示什么范围的数字?
具体来说,我只对16位和32位数字的范围感兴趣,精确到+/- 0.5(那些位置)或+/- 0.0005(千分位数).
double d = 0.0;
for (int i = 0; i < 10; i++)
{
d = d+0.1;
}
System.out.println(d);
Run Code Online (Sandbox Code Playgroud)
这是我在"最小惊喜原则"上阅读的一个例子
我只是好奇为什么代码会返回0.999999999,如果我将d的数据类型更改为float,我得到1.0000001.这种行为背后的原因是什么?