> Complex(1,2).numerator がエラーになります。rational を読んでいるとエラー
> になりません。

今ごろ気がついたのですが、Integer#{numerator,denominator} だけじゃないですね。
Float#{numerator,denominator} も必要です。

$ ruby19 -r rational -r complex -e 'Complex(1.0,2.0).numerator'
/usr/local/ruby19/lib/ruby/1.9.0/complex.rb:354:in `denominator': undefined method `denominator' for 1.0:Float (NoMethodError)
        from /usr/local/ruby19/lib/ruby/1.9.0/complex.rb:361:in `numerator'
        from -e:1:in `<main>'

しかも、Float#{numerator,denominator} なんて何処にも定義されてないので、
rational を読んでも関係ありません。

素直に直そうとすると、結局 Float#to_r を定義することになるんじゃないか
と思います。しかし、複素数の numerator、denominator を取るというのがよ
くわからなくて、Common Lisp を始め、普通は複素数に対しては機能しないで
すし、石塚さんに、意図を聞いたほうがいいですね。