【问题标题】:Ruby floating number subtraction wrong?Ruby浮点数减法错误?
【发布时间】:2013-11-22 14:14:48
【问题描述】:

谁能解释为什么下面的 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 的 Float 类无法完整准确地表示您输入的数字。不精确性分布不均,后两个数字的表示实际上是相同的 - 它是相同的 Float 对象。
  • 感谢您的回答!

标签: ruby numbers floating-accuracy rounding-error


【解决方案1】:

这些数字已经太大了,Ruby 已经无法将它们计算在内 - 它不能代表这么多的数字。因此,它将它们计数为二。两倍大的数字将被分成四等份,以此类推。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多