有趣的bug?在OS中预装Ruby(1.8.7)

时间:2012-12-29 10:45:46

标签: ruby

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效果很好。

1 个答案:

答案 0 :(得分:1)

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

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

在Ruby 1.9.3上运行correctly