> まず, 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)