ふなばです。

ruby の標準ライブラリ Rational を便利につかわせてもらっていますが、速
度面で課題がないわけではありません。そこで、原さんの rational
(http://raa.ruby-lang.org/project/rational/) を採用するというのはどう
でしょう。

標準ライブラリのなかでも、Rational は重要なもので、よくつかわれるもの
だと思います。もし速度面での改善が無意味でないならば、検討してみてほし
いと思います。


ついでですが、いくつか気がついたことを書きます。

Rational(-13, 4).to_i は、-4 になりますが、ruby の to_i は truncate の
はずなので、-3 にならないといけないのではないかと思います。

  r = Rational(-13, 4)
  r.to_i => -4
  r.to_f => -3.25
  r.to_f.to_i => -3


以下、divmod は床をとったものと余りになる、たとえば Common Lisp でいえ
ば、

  (multiple-value-list (floor -13/4 1) => (-4 3/4)

で、なおかつ、a.divmod(b) == [a.div(b), a % b] という前提で書きます。


原さんの rational は、r.divmod(1) が [-3, -1/4] になります (div と % も)。

ruby 1.8 では、-3.25.div(1) が -3 になります。1.9 では、-4 になります。