5
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 运行良好。

4

1 回答 1

1

这是Ruby 实现中的一个错误,已由补丁 358 修复。

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

在 Ruby 1.9.3 上可以正常工作。

于 2013-04-14T11:28:58.427 回答