2009-02-11 13 views
3

Si je tape ce grand entier:Pourquoi JRuby ne reconnaît pas BigNums pendant que Ruby le fait?

puts 9997836544.class.to_s 

et compilez avec rubis 1,86, il rapporte expectedly:

BigNum 

tout JRuby (dans Netbeans 1.1.4) rapporte de façon surprenante:

Fixnum 

Je pensais que Java avait une classe BigInteger pour correspondre à la classe BigNum dans Ruby. Si oui, je m'attendrais à ce que JRuby et ruby ​​produisent le même résultat.

+0

Je sais que Java a effectivement une classe BigInteger. Mais mes connaissances sur JRuby pourraient tenir dans un dé à coudre avec de l'espace restant. –

Répondre

2

Trouvé ce JRuby bug report:

Il semble que JRuby et l'IRM ont des limites différentes pour séparer les Fixnum et Bignum. Donc, MRI utilise 0x3fffffff comme le plus grand FixNum sous environnement 32 bits.
Et JRuby toujours utilise la valeur 64bit: jruby -e 'p (0x7fffffffffffffff + 1).class' ---> Bignum.

Alors essayez un plus grand nombre et vous devriez obtenir un BigNum comme vous vous y attendez.

+0

Incroyable. Merci d'avoir trouvé cela. –

+0

Ce n'était pas vraiment difficile. http://www.google.com/search?q=jruby+bignum+fixnum –

+0

Mais merci pour le représentant. :) –