dbush..
8
你最终得到的结果恰好是10,因为表示恰好是这样的.我对float和double的实现都是一样的.
让我们看一个使用double的例子:
如果我们10./3.使用十六进制浮点表示法打印出来%a,我们得到:
0x1.aaaaaaaaaaaabp+1
这与IEEE754双重表示相匹配0x401aaaaaaaaaaaab.
以上数字归一化为:
0x3.5555555555558
二进制:
11.0101010101010101010101010101010101010101010101011
为了简单起见,让我们添加三次而不是乘以3:
11.0101010101010101010101010101010101010101010101011
+ 11.0101010101010101010101010101010101010101010101011
---------------------------------------------------------
110.1010101010101010101010101010101010101010101010111
+ 11.0101010101010101010101010101010101010101010101011
---------------------------------------------------------
1010.0000000000000000000000000000000000000000000000000
这正好是10.
编辑:
看起来我设法在最后几位数字处理数学.实际总和:
11.0101010101010101010101010101010101010101010101011
+ 11.0101010101010101010101010101010101010101010101011
---------------------------------------------------------
110.1010101010101010101010101010101010101010101010110
+ 11.0101010101010101010101010101010101010101010101011
---------------------------------------------------------
1010.0000000000000000000000000000000000000000000000001
所以它不完全是 10,而是最不重要的一点.
我注意到使用float时有类似的区别.
10.f/3.f印有%a:
0x1.aaaaaap+1
标准化:
0x3.555554
二进制:
11.0101010101010101010101
然后我们添加:
11.0101010101010101010101
+ 11.0101010101010101010101
------------------------------
110.1010101010101010101010
+ 11.0101010101010101010101
------------------------------
1001.1111111111111111111111
再次,由最不重要的位.
至于实际结果如何四舍五入,我不能说.