Ruby 浮点数减法错误?

Ruby floating number subtraction wrong?

提问人:medi_kirk 提问时间:11/11/2013 最后编辑:the Tin Manmedi_kirk 更新时间:1/13/2014 访问量:275

问:

谁能解释一下为什么下面的 Ruby 例程会给我一个 2.0 的结果?我认为四舍五入浮点数是错误的根源。

puts(999_999_999_999_999_9.0 - 999_999_999_999_999_8.0);

= 2.0

同样的错误?

puts(999_999_999_999_999_3.0 - 999_999_999_999_999_2.0);

= 0.0

我正在运行 Ruby 1.9.3p448 (2013-06-27) [i386-mingw32]。

Ruby 数字 浮点精度 舍入误差

评论

0赞 Neil Slater 11/11/2013
是的,这是浮点舍入。你输入的数字不能用 Ruby 的类来完整准确地表示。不精确性不是均匀分布的,你的后两个数字的表示实际上是相同的——它是同一个对象。FloatFloat

答:

0赞 Gangnus 1/13/2014 #1

这些数字已经太大了,Ruby 已经无法将它们计算在 1 中了——它不能代表这么多数字。所以,它把它们分成两部分。大两倍的数字将以四为单位计算,依此类推。

这取决于浮点数的尾数可以接受的位数。它总是在基本类型描述中提及。