Crashing Fixnum#** with 64 bit Ruby

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> (2**32).class
=> Bignum
irb(main):002:0> (2**32) ** (2**33)
(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> (2**32).class
=> Fixnum
irb(main):003:0> (2**32) ** (2**33)
(irb):3:in `**': failed to allocate memory (NoMemoryError)
         from (irb):3:in `irb_binding'
         from /opt/test/lib/ruby/1.8/irb/workspace.rb:52:in `irb_binding'

The behavior is identical with or without Rational, btw.

Regards,

Dan

···

from :0

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

···

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

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> (2**32).class
=> Bignum
irb(main):002:0> (2**32) ** (2**33)
(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> (2**32).class
=> Fixnum
irb(main):003:0> (2**32) ** (2**33)
(irb):3:in `**': failed to allocate memory (NoMemoryError)
        from (irb):3:in `irb_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

<snip>

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

···

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