From: Yukihiro Matsumoto Date: 2010-08-11T00:17:15+09:00 Subject: [ruby-dev:41983] Re: [Bug #3676] CMath.cbrt(-8)の結果が複素数にならない まつもと ゆきひろです In message "Re: [ruby-dev:41980] Re: [Bug #3676] CMath.cbrt(-8)の結果が複素数にならない" on Tue, 10 Aug 2010 23:22:12 +0900, Tadayoshi Funaba writes: |> 現在のCMath.cbrt(-8)の結果は-2で、これは3乗すると-8になるとい |> う意味で正しい値に思えるのですが。Cmath.cbrt(-8)が返すべき |> 「正しい」値はなんだとお考えですか? | |絶対的に正しい値はないと思いますが、おおよそ、Complex(-8) ** (1.0/3) で |ある (1.0+1.73205080756888i) ではないでしょうか。 そうなんですか、複素数の範囲では一意に決まらないということな んですかね。無知ですいません。 |複素数を値域、定義域にする関数なら、複素数の範囲内でもっとも適切な値を |返すべきだと思います。逆に言えば、Math.cbrt は実数の範囲内では、-2.0 を |返すのが妥当だからそうなっているのではないかと思います。CMath は実数で |表現できない場合に複素数をつかう関数ではなく、複素数を値域、定義域に持 |つ関数群なのではないでしょうか。 繰り返しになりますが、現状のCMathは「複素数の範囲内でもっと も適切な値を返す」という設計にはなっていませんね。そうすべき であるかどうか、私は判断できる知識がありませんが、そうだとす るとCMathそのもののあり方を変更するような大きな判断だと思い ます。