正木です。

|[ruby-math:00786] Re: Rational#to_f
|From: keiju / rational.com
|
|この件ですが, Floatのフォーマットを意識した変換の方が良いと思うのです
|が? つまり, 2進法をベースにした変換というか...

私は逆に出来るだけ Float の実装に依存しない書き方の方が良いと思いますが。

ただ問題の code にはまだ bug がありました。
次のように修正します:

class Rational
  def to_f
    if numerator.to_f.finite? && denominator.to_f.finite?
      return numerator.to_f/denominator 
    end
    return -(-self).to_f if self < 0
    return floor.to_f+(self-floor).to_f if self > 1
    return 1/(1/self).to_f if self < 1
   end
end