Ruby Forum Ruby > Shortest Ruby crash #49

Posted by Limo Driver (Guest)
on 19.08.2008 21:40
(Received via mailing list)
My contribution to the contest:

5**6**7

This baby throws "Errno::EBADF: Bad file descriptor", which I think
deserves a medal for being the least intuitive error message of 2008!

And now, for the real question...

Why is this being evaluated as 5**(6**7), when for instance 9/9/9 is
being evaluated normally (9/9)/9=0, instead of 9/(9/9)=9?

Lata!
Posted by Rob Biedenharn (Guest)
on 19.08.2008 21:44
(Received via mailing list)
On Aug 19, 2008, at 3:36 PM, Limo Driver wrote:

> being evaluated normally (9/9)/9=0, instead of 9/(9/9)=9?
>
> Lata!


Mine is fine with it:
irb> 5**6**7
(irb):17: warning: in a**b, b may be too big
=> Infinity

What ruby do you have that crashes?

-Rob

Rob Biedenharn    http://agileconsultingllc.com
Rob@AgileConsultingLLC.com
Posted by Dave Thomas (Guest)
on 19.08.2008 21:48
(Received via mailing list)
On Aug 19, 2008, at 2:36 PM, Limo Driver wrote:

> My contribution to the contest:
>
> 5**6**7

On 1.9, I get a number of 195,667 digits that starts 736 and ends 635.

Dave
Posted by Joost Diepenmaat (Guest)
on 19.08.2008 21:53
(Received via mailing list)
Limo Driver <melezov@gmail.com> writes:

> My contribution to the contest:
>
> 5**6**7
>
> This baby throws "Errno::EBADF: Bad file descriptor", which I think
> deserves a medal for being the least intuitive error message of 2008!

Works fine for me:

$ irb
irb(main):001:0> 5**6**7
=> 73643396061195573182045442760389697209119043099561473825102644208480
80271451222449204242010655986286553096951684440491235491489097071221600
73189280314561194164500176158310362022388644790243471934093460794441233
52773742517692136546608518658769275630499890833988104996453386858963527
....
and so on

this on my locally compiled irb 0.9.5(05/04/13) on debian

> And now, for the real question...
>
> Why is this being evaluated as 5**(6**7), when for instance 9/9/9 is
> being evaluated normally (9/9)/9=0, instead of 9/(9/9)=9?

What makes you think either order is the "normal" one?
Posted by Joshua Ballanco (jballanc)
on 19.08.2008 21:53
Limo Driver wrote:
> Why is this being evaluated as 5**(6**7), when for instance 9/9/9 is
> being evaluated normally (9/9)/9=0, instead of 9/(9/9)=9?
Exponentiation has reverse precedence as compared to division, 
multiplication, etc.
Posted by Limo Driver (Guest)
on 19.08.2008 21:55
(Received via mailing list)
I've installed ruby exactly 8 minutes ago.
Managed to crash it with my fifth 'Hello World' attempt.

ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]

It's not really about the crash, it's about the interesting operation
precedence.
Posted by Limo Driver (Guest)
on 19.08.2008 21:59
(Received via mailing list)
It seems your kung-fu is stronger than mine. :P

Fine than, try 9**9**9. Ouch.
Posted by Limo Driver (Guest)
on 19.08.2008 22:12
(Received via mailing list)
Well, I kindof gathered that so far :/

Now I'm just trying to poke at the "Principle of Least Astonishment".
Posted by Martin DeMello (Guest)
on 19.08.2008 22:20
(Received via mailing list)
On Tue, Aug 19, 2008 at 12:36 PM, Limo Driver <melezov@gmail.com> 
wrote:>
> Why is this being evaluated as 5**(6**7), when for instance 9/9/9 is
> being evaluated normally (9/9)/9=0, instead of 9/(9/9)=9?

Ruby follows the actual mathematical usage, where a^b^c (imagine it
written in tower form) is a^(b^c). I guess this is because (a^b)^c =
a^(bc), so a^(b^c) was the case that needed the compact notation

martin
Posted by Francis Burton (fburton)
on 19.08.2008 23:25
(Received via mailing list)
In article 
<636f74c2-f7d1-4204-929b-db7200bb2d9c@m3g2000hsc.googlegroups.com>,
Limo Driver  <melezov@gmail.com> wrote:
>Well, I kindof gathered that so far :/
>
>Now I'm just trying to poke at the "Principle of Least Astonishment".

At least it is only mild astonishment in this case. ;-)

Francis
Posted by Tim Hunter (timhunter)
on 20.08.2008 01:15
Limo Driver wrote:
> I've installed ruby exactly 8 minutes ago.
> Managed to crash it with my fifth 'Hello World' attempt.
> 
> ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
> 
> It's not really about the crash, it's about the interesting operation
> precedence.

I tried with the identical version of Ruby on WinXP and I get the "b may 
be too large" message. No crash.
Posted by Robert Dober (Guest)
on 20.08.2008 04:35
(Received via mailing list)
On Tue, Aug 19, 2008 at 9:44 PM, Dave Thomas <dave@pragprog.com> wrote:
>
> On Aug 19, 2008, at 2:36 PM, Limo Driver wrote:
>
>> My contribution to the contest:
>>
>> 5**6**7
>
> On 1.9, I get a number of 195,667 digits that starts 736 and ends 635.
...containing 42 exactly 1922 times.
R.
Posted by Sandor Szücs (Guest)
on 20.08.2008 11:42
(Received via mailing list)
On 19.08.2008, at 21:44, Dave Thomas wrote:
> On Aug 19, 2008, at 2:36 PM, Limo Driver wrote:
>
>> My contribution to the contest:
>>
>> 5**6**7
>
> On 1.9, I get a number of 195,667 digits that starts 736 and ends 635.

Really?
With 1.9 and 1.8.7, I get a number that starts with the same and ends
with
625. I hope it's just a typo.

$ ruby --version
ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin8]
$ ruby19 --version
ruby 1.9.0 (2008-08-18 revision 0) [i386-darwin8.11.1]


regards, Sandor 
Szücs
Posted by Robert Dober (Guest)
on 20.08.2008 11:53
(Received via mailing list)
On Wed, Aug 20, 2008 at 11:38 AM, Sandor 
Szücs<sandor.szuecs@fu-berlin.de> wrote:
>
> Really?
> With 1.9 and 1.8.7, I get a number that starts with the same and ends with
> 625. I hope it's just a typo.
If I remember modulo calculations from school correctly it surely is a 
typo ;)
R.
Posted by Charles Oliver Nutter (Guest)
on 20.08.2008 18:39
(Received via mailing list)
Limo Driver wrote:
> being evaluated normally (9/9)/9=0, instead of 9/(9/9)=9?
Appears to be working fine on JRuby trunk.

- Charlie