ruby计算浮动错误吗?

这有什么不对吗? (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:  expected but was  

从浮点指南 :

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

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

编译或解释代码时,“0.1”已经四舍五入到该格式中最接近的数字,这甚至在计算发生之前就会导致小的舍入误差。

阅读链接到网站了解详细信息以及解决此问题的方法。

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

浮点运算并不精确。 应该用assert((xm-x).abs < epsilon)接近度来取代平等,其中epsilon0.01类的小数。

读这个 。 它描述了浮点数的二进制表示在每种语言中的工作方式,而不仅仅是Ruby。

你的问题的答案是:

(其他答案告诉你为什么,但你没有问过。:p)