Forum: Ruby biggest number

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Javier E. (Guest)
on 2009-04-25 14:34
I'm learning ruby, and I want to know if it is any way to know the
biggest number to be represented with a specific type of number (Fixnum,
Bignum, Float).

 Thank you.
Charles Oliver N. (Guest)
on 2009-04-25 15:09
(Received via mailing list)
Javier E. wrote:
> I'm learning ruby, and I want to know if it is any way to know the
> biggest number to be represented with a specific type of number (Fixnum,
> Bignum, Float).

Float is a standard 64-bit IEEE floating point value. There are several
constants on the Float class that can tell you whatever you need:

âž” jruby -e "p Float::constants"
["MAX", "MAX_10_EXP", "MANT_DIG", "RADIX", "DIG", "MIN", "ROUNDS",
"MIN_EXP", "EPSILON", "MIN_10_EXP", "MAX_EXP"]

Fixnum has no such constants, but on most implementations (CRuby, JRuby,
Rubinius at least) its max size is dependent on how large its basis
representation is. I believe it can be either "32" or "64" bits on
CRuby, where on JRuby it is always "64" bits:

âž” ruby -e "p (1 << (1.size * 8 - 1)) - 1"
2147483647

âž” ruby -e "p -(1 << (1.size * 8 - 1))"
-2147483648

âž” jruby -e "p (1 << (1.size * 8 - 1)) - 1"
9223372036854775807

âž” jruby -e "p -(1 << (1.size * 8 - 1))"
-9223372036854775808

The loss of one bit of precision on most impls is to emulate CRuby's
implementation of Fixnum as a tagged pointer, where the top bit
indicates whether an object pointer is a real pointer or a Fixnum
value).

And Bignum has no min or max size, other than the maximum size of a
byte[] on your system.

- Charlie
Javier E. (Guest)
on 2009-04-25 16:10
Thank you Charlie

Charles Oliver N. wrote:
Joel VanderWerf (Guest)
on 2009-04-25 22:21
(Received via mailing list)
Javier E. wrote:
> I'm learning ruby, and I want to know if it is any way to know the
> biggest number to be represented with a specific type of number (Fixnum,
> Bignum, Float).
>
>  Thank you.

irb(main):005:0> (2**30).class
=> Bignum
irb(main):006:0> (2**30-1).class
=> Fixnum

irb(main):009:0> RUBY_VERSION
=> "1.8.6"
This topic is locked and can not be replied to.