[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

N00b question about Infinity and Float

Kedar Mhaswade

12/31/2008 3:13:00 AM

Folks,

A new user. Please be kind. I have checked
http://www.ruby-...topic..., but could not find what I was
looking for.

See following irb session:

start

irb(main):004:0* google=10**100
=>
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
irb(main):005:0> googleplex=10**google
(irb):5: warning: in a**b, b may be too big
=> Infinity
irb(main):006:0> google.class
=> Bignum
irb(main):007:0> googleplex.class
=> Float

end

This was nice! But, I expected googleplex.class to be BigNum. Is
Infinity a Float?

Why?

Thanks in advance,
Kedar
--
Posted via http://www.ruby-....

2 Answers

Bertram Scharpf

12/31/2008 4:24:00 AM

0

Hi,

Am Mittwoch, 31. Dez 2008, 12:12:55 +0900 schrieb Kedar Mhaswade:
> irb(main):004:0* google=10**100
> =>
> 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
> irb(main):005:0> googleplex=10**google
> (irb):5: warning: in a**b, b may be too big
> => Infinity
> irb(main):006:0> google.class
> => Bignum
> irb(main):007:0> googleplex.class
> => Float
>
> This was nice! But, I expected googleplex.class to be BigNum. Is
> Infinity a Float?

I like this kind of questions. A weird example, though; I would
prefer an exception. BigNum * BigNum may not result in a Float.
Hit me with your refutations.

Bertram


--
Bertram Scharpf
Stuttgart, Deutschland/Germany
http://www.bertram-...

M. Edward (Ed) Borasky

12/31/2008 7:23:00 AM

0

Bertram Scharpf wrote:
> Hi,
>
> Am Mittwoch, 31. Dez 2008, 12:12:55 +0900 schrieb Kedar Mhaswade:
>> irb(main):004:0* google=10**100
>> =>
>> 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>> irb(main):005:0> googleplex=10**google
>> (irb):5: warning: in a**b, b may be too big
>> => Infinity
>> irb(main):006:0> google.class
>> => Bignum
>> irb(main):007:0> googleplex.class
>> => Float
>>
>> This was nice! But, I expected googleplex.class to be BigNum. Is
>> Infinity a Float?
>
> I like this kind of questions. A weird example, though; I would
> prefer an exception. BigNum * BigNum may not result in a Float.
> Hit me with your refutations.
>
> Bertram
>
>
Hmmm ... "google" is a Bignum (multi-precision integer). "10" is an
Integer. So you are raising an Integer to a Bignum power. So it boils
down to how Ruby raises an Integer to a Bignum power. Now if this were
an "ideal machine", it would perform some kind of exact, and very long
running, exponentiation routine. Clearly it didn't ... it looked at the
numbers and said, "Whoa!" :)

Yeah ... it should have returned an exception, not a Float. But there
are plus and minus Infinity in the IEEE floating point number spec, so I
guess it makes sense to return that. But in theory, given enough memory
for the digits and enough compute time, it could return a Bignum. An
estimate of the amount of memory required is left as an exercise for the
student. :)

Incidentally, the correct spelling is "googol", not to be confused with
the search engine or the Russian author. :)

--
M. Edward (Ed) Borasky, FBG, AB, PTA, PGS, MS, MNLP, NST, ACMC(P), WOM

I've never met a happy clam. In fact, most of them were pretty steamed.