3

この大きな整数を入力すると:

puts 9997836544.class.to_s

ruby 1.86 でコンパイルすると、次のように報告されます。

BigNum

一方、JRuby (Netbeans では 1.1.4) は驚くべきことに次のように報告しています。

Fixnum

Java には、Ruby の BigNum クラスに対応する BigInteger クラスがあると思いました。もしそうなら、JRuby と ruby​​ が同じ出力を生成することを期待していたでしょう。

4

1 に答える 1

3

このJRubyバグレポートを見つけました:

JRuby と MRI では、Fixnum と Bignum を分離するための制限が異なるようです。
…という
ことで、MRIは32bit環境下で最大のFixNumとして0x3ffffffffを使用しています。
また、JRubyは常に64 ビット値を使用します: jruby -e 'p (0x7fffffffffffffff + 1).class'---> Bignum。

したがって、より大きな数を試してみると、期待どおりに BigNum が得られるはずです。

于 2009-02-11T20:25:42.643 に答える