N00b question about Infinity and Float


#1

Folks,

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

See following irb session:

start

irb(main):004:0* google=10100
=>
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


#2

Hi,

Am Mittwoch, 31. Dez 2008, 12:12:55 +0900 schrieb Kedar M.:

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


#3

Bertram S. wrote:

=> Bignum
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!” :slight_smile:

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. :slight_smile:

Incidentally, the correct spelling is “googol”, not to be confused with
the search engine or the Russian author. :slight_smile:


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

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