标签: ruby
2**2 => 4 2**63 => -9223372036854775808 2**63 + 2**63 => -18446744073709551616
64及其后的所有内容都会返回0
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效果很好。
答案 0 :(得分:1)
这是关于Ruby实现的a bug,已由补丁358修复。
这是因为乘法的返回值被声明为volatile,这意味着无法进行优化。 默认的C优化不会导致overflow,因此删除了volatile关键字。
volatile
在Ruby 1.9.3上运行correctly。