>  (1) (-8)**Rational(1,2) は複素数1.0+1.7320508*i
>  (2) Math.sqrt(-8) は、例外発生
> 
> でどうでしょうか。(2) の理由は「伝統の維持」です。(1) は、互換性がない
> のだけど、多分使っている人は少ないからまあいいか、ということです。
> やっぱり難しいなあ。

やはりちぐはぐな感じがしますね。

ruby では、同じ数値を Rational でも Complex でも表現でき、また、関数形
式、メソッド形式、演算子間で違いがあって、さらに mathn もあって、あちこ
ち分断されているように感じます。

この案を採用したとして、

Math.sqrt(Rational(1,4)) #=> Rational(1, 2)
Math.sqrt(4) #=> 2

のようなことをしたい場合、どういう対応になるんでしょうね。