我认为Ruby会自动转换为Bignum。我找到了确认here
但是,它没有发生:
ruby 1.8.7 (358) [universal-darwin12.0]
>> 2 ** 62
=> 4611686018427387904
>> 2 ** 63
=> -9223372036854775808 #why minus - how about automatic Bignum conversion?
>> 2 ** 64
=> 0 #- how about automatic Bignum conversion?
答案 0 :(得分:0)
Ruby 1.8.7(在互联网术语中)是古老的。使用更近期的东西。例如:
[1] pry(main)> RUBY_VERSION
=> "2.0.0"
[2] pry(main)> 2 ** 63
=> 9223372036854775808
[3] pry(main)> 2 ** 64
=> 18446744073709551616
答案 1 :(得分:0)
最有可能是您正在使用的构建的特定错误。例如,当我ruby -v
时,我得到:
ruby 1.8.7 (2011-02-18 patchlevel 334) [i686-darwin12.2.1], MBARI 0x6770, Ruby Enterprise Edition 2011.03
...在irb
会话中,我得到了:
1.8.7 :006 > 2 ** 64
=> 18446744073709551616
1.8.7 :007 > (2 ** 64).class
=> Bignum
1.8.7 :008 > RUBY_VERSION
=> "1.8.7"
如果我使用较新版本,我也不会遇到此问题。如果您可以发布ruby -v
的输出,那将会对情况有所启发。例如Ruby REE vs. MRI vs. JRuby等
此外,这只是一个意见,所以请考虑它的价值,但我不认为Apple非常擅长保持其内置版本的Ruby更新,所以以防你使用内置-in版本然后考虑转移到另一个版本。
答案 2 :(得分:0)
这可能是旧版Ruby中的一个错误。切换到更新版本,问题就消失了。今天是Ruby 2.0的发布日。 Ruby 1.8很快就会死掉。在我的Ruby 1.9.3上,我只是做了2**1000000
没有任何问题,只是它持续了一段时间,所以我不得不终止它。