From: Teruki Shigitani Date: 2008-03-27T11:47:52+09:00 Subject: [ruby-dev:34151] Re: rational.rb, complex.rb and mathn.rb 鴫谷です。 -------- Original Message -------- Subject: [ruby-dev:34143] Re: rational.rb, complex.rb and mathn.rb From: Shin-ichiro HARA To: ruby developers list Date: Wed Mar 26 2008 19:22:56 GMT+0900 > 書きながら表現が悪いなと思っていました、すいません。 > 正確には、「この定義では、3乗根を取ることが、実数から実数への > 関数 y = x**3 の逆関数ではなくなる」と言うべきでした。 関数をどう定義するかということになります。 シンプルな定義をするなら、以下の a), b) が考えられます。 a) 実数 -> 実数をあらわすものとするなら、x >= 0 のみ定義される b) 複素数 -> 複素数をあらわすものとするなら、x は全領域で定義される a) の場合、(-2) ** 3 は定義されていないはずです。 そこで Python などでは、 a') y が整数の場合は、x は全領域で定義される という定義を追加しています。 ということは、同じように (-8) ** (1/3) を定義するためには、 a") y が Rational で、分母が奇数の場合のみ、x は全領域で定義される という定義を追加することになるでしょう。 この場合、(-8) ** (1/3) は -2 が返ることになります。 b) なら特に複雑なことをせず、(-8) ** (1/3) は 1 + √3i が返ります (田中昌宏さんの計算方法が普通でしょうから) # いずれの場合も、x = 0, Re(y) < 0 なら未定義です