2009-02-11 4 views
3

Если я печатаю это большое целое число:Почему JRuby не распознает BigNums, пока Ruby делает?

puts 9997836544.class.to_s 

и компилировать с рубином 1,86, он сообщает ожидаемо:

BigNum 

в то время как JRuby (1.1.4 в Netbeans) сообщает удивительно:

Fixnum 

Я думал, что Java имеет класс BigInteger, соответствующий классу BigNum в Ruby. Если это так, я ожидал, что JRuby и ruby ​​получат тот же результат.

+0

Я знаю, что Java действительно имеет класс BigInteger. Но мои знания о JRuby могли вписаться в наперсток с оставшимся пробелом. –

ответ

2

Нашел JRuby bug report:

кажется, что JRuby и МРТ имеют различные ограничения для разделения Fixnum и Bignum.
...
Итак, MRI использует 0x3fffffff как самый большой FixNum под 32-битной средой.
И JRuby всегда использует 64-битное значение: jruby -e 'p (0x7fffffffffffffff + 1).class' ---> Bignum.

Так что попробуйте большее количество, и вы должны получить BigNum, как вы ожидаете.

+0

Невероятно. Спасибо, что нашли это. – 2009-02-11 20:27:56

+0

Это было не так уж сложно. http://www.google.com/search?q=jruby+bignum+fixnum –

+0

Но спасибо за репутацию. :) –