まつもと ゆきひろです

In message "Re: [ruby-dev:41980] Re: [Bug #3676] CMath.cbrt(-8)の結果が複素数にならない"
    on Tue, 10 Aug 2010 23:22:12 +0900, Tadayoshi Funaba <tadf / dotrb.org> 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そのもののあり方を変更するような大きな判断だと思い
ます。