mathn

mathnモジュールを使うと、Integerの / で割り切れないとき、自動的に結果がRationalになります。つまり、こういうことです。

p 4/2         #=> 2
p 1/2         #=> 0

require 'mathn'

p 4/2         #=> 2
p 1/2         #=> 1/2

クラスを調べてみましょう。

p (4/2).class     #=> Fixnum
p (1/2).class     #=> Fixnum

require 'mathn'

p (4/2).class     #=> Fixnum
p (1/2).class     #=> Rational

結果がそのクラスに収まらないときには一歩広いクラスに自動的にうつるという意味では、FixnumがBignumになるのと似ています。

p (2**10).class   #=> Fixnum
p (2**20).class   #=> Fixnum
p (2**29).class   #=> Fixnum
p (2**30).class   #=> Bignum

x = 2**30
p x.class     #=> Bignum
x >>= 1
p x.class     #=> Fixnum