From: Tadayoshi Funaba Date: 2010-08-10T23:22:12+09:00 Subject: [ruby-dev:41980] Re: [Bug #3676] CMath.cbrt(-8)の結果が複素数にならない > 現在のCMath.cbrt(-8)の結果は-2で、これは3乗すると-8になるとい > う意味で正しい値に思えるのですが。Cmath.cbrt(-8)が返すべき > 「正しい」値はなんだとお考えですか? 絶対的に正しい値はないと思いますが、おおよそ、Complex(-8) ** (1.0/3) で ある (1.0+1.73205080756888i) ではないでしょうか。 > あるいは(-2+0i)を返すべきという主張なのかもしれませんが、現在 > のCMathの関数群は、全般に「Mathの関数群が実数の範囲で定義され > ずエラーになる場合、CMathの対応する関数は複素数を返す」という > 設計になっており、ことさらcbrtについてだけ変える必要があるよ > うには思えません。 複素数を値域、定義域にする関数なら、複素数の範囲内でもっとも適切な値を 返すべきだと思います。逆に言えば、Math.cbrt は実数の範囲内では、-2.0 を 返すのが妥当だからそうなっているのではないかと思います。CMath は実数で 表現できない場合に複素数をつかう関数ではなく、複素数を値域、定義域に持 つ関数群なのではないでしょうか。