> まず, Unifyなしで動作するように, mathn側で対応させてください. それから,
> Rational/Complex の方を変更していただけるとありがたいです. 

ああ、凍結も近いので少し前にコミットしてしまいました。大丈夫ですかね。

>   i*i => -1 
> 
> となり,
> 
>   sqrt(i * i) => i
> 
> にならなくなるので... もしくは, CMath相当の振る舞いが標準の振る舞いに
> なるか...

可能性としては、sqrt は整数や有理数も返せるので、Math か CMath かという
分け方がどうかというのもありますね。

そういう方向性がはっきりしていれば、** の定義も変えてよかったかなと思い
ます。まがりなりにも CMath もありますし。

そういえば、python も 2 では、(-8)**(1.0/3) がエラーになりますが、3 で
は、(-8)**(1/3) で複素数が返るようになっています。

>>> from cmath import *
>>> 1j * 1j
(-1+0j)
>>> sqrt(1j * 1j)
1j
>>> 1/3
0.33333333333333331
>>> (-8)**(1/3)
(1.0000000000000002+1.7320508075688772j)

main@190-20080923> require 'cmath'
#=> true
main@190-20080923> include CMath
#=> Object
main@190-20080923> Complex(0,1) * Complex(0,1)
#=> (-1+0i)
main@190-20080923> sqrt(Complex(0,1) * Complex(0,1))
#=> (0.0+1.0i)
main@190-20080923> 1/3
#=> 0
main@190-20080923> (-8)**(1/3)
#=> 1
main@190-20080923> (-8)**(1.0/3)
#=> NaN
main@190-20080923> Complex(-8)**(1.0/3)
#=> (1.0+1.73205080756888i)