【问题标题】:Interesting bug? in OSX preinstalled Ruby (1.8.7)有趣的错误?在 OSX 预装 Ruby (1.8.7)
【发布时间】:2012-12-29 10:45:46
【问题描述】:
2**2
=> 4

2**63
=> -9223372036854775808

2**63 + 2**63
=> -18446744073709551616

64 以及它返回后的所有内容0

2**64
=> 0

2**65
=> 0

2**100
=> 0

2**1000
=> 0

相同的版本在 Linux 上运行良好。

有什么线索吗?

在 64 位模式下运行 OSX 10.8.2。

没有 RVM/Rbenv。

Ruby 1.9.3 运行良好。

【问题讨论】:

  • 看起来像整数溢出。
  • 有趣的一个。能否请您添加执行2**63 + 2**63的结果该错误无法在我的环境中重现,因此我无法自己尝试。
  • @izomorphius,更新问题
  • 哇!这真是太棒了!即使整数溢出也无法解释当将 2^63 添加到 2^63 时如何得到-2^64 的结果除非你有一个 65 位整数,否则它对我没有任何意义:?似乎大整数的算术在您的系统上完全被破坏了。更大的表情呢?你能算出 2^123 吗?
  • @izomorphius,不确定系统,1.9.3 工作正常。问题已更新

标签: ruby


【解决方案1】:

这是 Ruby 实现中的 a bug,已由补丁 358 修复。

这是因为乘法的返回值声明为volatile,这意味着无法优化。 默认的 C 优化不会导致 overflow,因此删除了 volatile 关键字。

在 Ruby 1.9.3 上工作 correctly

【讨论】:

    猜你喜欢
    • 2013-05-05
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多