ふなばです。

-13 % 4 は 3 になるのに、-13.0 % 4 は 3.0 になりません。divmod も
Float と Rational では、違うようです。このあたり、統一できないものでしょ
うか。

floor などは、self を返すだけでいいから、Integer や Rational にも定義して、

def divmod(other) return (self / other).floor, self % other end

# floor はつねに Integer で返す。

のようにしませんか。

ふなば ただよし