Crashing Fixnum#** with 64 bit Ruby


#1

Hi all,

I thought this was interesting. Should Ruby handle this better? Or is
this a
case of, “Don’t do that.”?

32 bit Ruby, Solaris 10

irb(main):001:0> (232).class
=> Bignum
irb(main):002:0> (2
32) ** (233)
(irb):2: warning: in a
b, b may be too big
=> Infinity

DANGER! DANGER! WILL BRING SYSTEM TO A CRAWL!

64 bit Ruby, Solaris 10

irb(main):002:0> (232).class
=> Fixnum
irb(main):003:0> (2
32) ** (2**33)
(irb):3:in **': failed to allocate memory (NoMemoryError) from (irb):3:inirb_binding’
from /opt/test/lib/ruby/1.8/irb/workspace.rb:52:in
`irb_binding’
from :0

The behavior is identical with or without Rational, btw.

Regards,

Dan


#2

On Apr 6, 2006, at 2:01 PM, Daniel B. wrote:

(irb):2: warning: in a**b, b may be too big
from (irb):3:in irb_binding' from /opt/test/lib/ruby/1.8/irb/workspace.rb:52:inirb_binding’
from :0

The behavior is identical with or without Rational, btw.

Regards,

Dan

Incidently I get this:
% irb
irb(main):001:0> (232) ** (232)
/usr/local/ruby/lib/ruby/1.8/rational.rb:543: warning: in a**b, b may
be too big
=> Infinity


#3

On Apr 6, 2006, at 2:01 PM, Daniel B. wrote:

You can ignore my previous message, I didn’t fully read yours. D’Oh.