2

我认为 Ruby 会自动转换为 Bignum。我在这里找到了确认

但是,它没有发生:

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?                       
4

3 回答 3

0

使用较新的 Ruby 版本

Ruby 1.8.7(在互联网术语中)是古老的。使用更新的东西。例如:

[1] pry(main)> RUBY_VERSION
=> "2.0.0"
[2] pry(main)> 2 ** 63
=> 9223372036854775808
[3] pry(main)> 2 ** 64
=> 18446744073709551616
于 2013-02-24T03:43:21.057 回答
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 更新方面做得不是很好,所以以防万一你使用的是内置版本然后考虑转移到另一个版本。

于 2013-02-24T03:43:59.540 回答
0

这可能是旧版本 Ruby 中的一个错误。换个新版本,问题就解决了。今天是 Ruby 2.0 的发布日。Ruby 1.8 很快就会死掉。在我的 Ruby 1.9.3 上,我只是没有2**1000000任何问题,只是它持续了一段时间,所以我不得不终止它。

于 2013-02-24T03:44:08.477 回答