这是直接来自我的 VBE (MS Excel 2007 VBA) 的小精华:
?clng(150*0.85)
127
x = 150*0.85
?clng(x)
128
有人能解释这种行为吗?恕我直言,第一个表达式应该产生 128(0.5 四舍五入到最接近的偶数),或者至少两个结果应该相等。
我认为wqw是对的,但我会提供细节。
在声明中clng(150 * 0.85)
, 150 * 0.85
以扩展精度计算:
150 = 1.001011 x 2^7
0.85
双精度 =
1.1011001100110011001100110011001100110011001100110011 x 2^-1
用手将它们相乘,你会得到
1.1111110111111111111111111111111111111111111111111111110001 x 2^6 =
127.4999999999999966693309261245303787291049957275390625
那是 59 位,非常适合扩展精度。它小于127.5
所以向下舍入。
在声明中x = 150 * 0.85
,该 59 位值四舍五入为 53 位,给出
1.1111111 x 2^6 = 1111111.1 = 127.5
因此,它按照半舍入到偶数的方式向上舍入。
(参见我的文章http://www.exploringbinary.com/when-doubles-dont-behave-like-doubles/了解更多信息。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)