ruby计算漂浮物是否错误?

flo*_*her 2 ruby floating-point floating-accuracy

这里有什么不对?(ruby版本:1.9.2p290(2011-07-09修订版32553)[x86_64-darwin11.0.0]

x = 523.8
w = 46.9
xm = x + w
assert_equal w, (xm - x) # FAILS with: <46.9> expected but was <46.89999999999998>
Run Code Online (Sandbox Code Playgroud)

Mic*_*rdt 10

浮点指南:

为什么我的数字,如0.1 + 0.2加起来不是很好的一轮0.3,而是我得到一个奇怪的结果,如0.30000000000000004?

因为在内部,计算机使用的格式(二进制浮点)无法准确地表示0.1,0.2或0.3之类的数字.

编译或解释代码时,"0.1"已经四舍五入到该格式中最接近的数字,即使在计算发生之前也会导致小的舍入误差.

阅读链接到站点以获取详细信息以及解决此问题的方法.


Jos*_*Fox 6

这是完全正常的; 这是关于浮点运算的低级概念而不是Ruby的事实,因此可以在任何语言中出现.

浮点运算不精确.平等应该用接近的线来代替 assert((xm-x).abs < epsilon),其中epsilon有一些小的数字0.01.