所以浮点运算inexact但并不能完全解释什么是怎么回事:这个表达式为什么会导致浮点错误?
[46] pry(main)> a=0.05
=> 0.05
[47] pry(main)> a=a*26.0/65
=> 0.02
所以在这里,我们有我们所期望的,我们得到了正确的答案和世界保持美丽转向。但是我们稍后重写了这个函数,当我们这样做的时候,我们将a=a*26.0/65
换成a*=26.0/65
并不是那么好,我们输入了少一个字符!让我们看看这对我们是如何解决的?
[48] pry(main)> a=0.05
=> 0.05
[49] pry(main)> a*=26.0/65
=> 0.020000000000000004
[50] pry(main)> 26.0/65
=> 0.4
这表明a*=b
是不一样的书写a=a*b
。它似乎不是一个正常的浮动四舍五入误差,因为这些数字都不应该作为浮点四舍五入(尾数应该超过26.0,26.0,65,65.0)。
我确定在引擎盖下有些微妙的变化,想知道发生了什么?
用ruby 2.0.0p247和1.9.3p392 [x86_64-linux]转载。我喜欢“这个世界一直在转动的美丽”的部分:) :) – tessi