From: Yusuke ENDOH Date: 2010-08-11T01:08:23+09:00 Subject: [ruby-dev:41987] Re: [Bug #3676] CMath.cbrt(-8)の結果が複素数にならない 遠藤です。 まず、これを変えたのは私です。[ruby-core:31234] でバグ報告が 来たためでした。相談せずに変えてしまってすみません。 2010年8月10日23:22 Tadayoshi Funaba : >> 現在のCMath.cbrt(-8)の結果は-2で、これは3乗すると-8になるとい >> う意味で正しい値に思えるのですが。Cmath.cbrt(-8)が返すべき >> 「正しい」値はなんだとお考えですか? > > 絶対的に正しい値はないと思いますが、おおよそ、Complex(-8) ** (1.0/3) で > ある (1.0+1.73205080756888i) ではないでしょうか。 高校レベルの複素数の知識しかないので、Complex#**(Rational) が n 乗根のどれを返すかは不定だと思っていました。 仰角が正で最小のものが「おおよそ正しい」んですかね。 少なくとも Complex#** の仕様として決まっているなら、できれば rdoc に書いておいて欲しいです。 2010年8月11日0:35 Tadayoshi Funaba : > まつもとさんが言っているのはそういう意味じゃないと思いますが、定義域と > 値域があって関数がある、Math は実数に対して定義がある。CMath は複素数に > 対して定義される、というのは常識的な事で、議論の余地はないくらいに思い > ます。CMath は制限の撤廃、あるいは定義域値域の拡大だと思います。 私はまつもとさんと同じ感覚でした (CMath は Math の挙動を拡張する だけで変えはしない) 。[ruby-core:31234] の人も同じ感覚だと思います。 ちなみに後で登場するに違いないと思いますが、むらけんさんはふなば さんと同じ感覚のようです。 この機会にコンセンサス (や将来的な方針) を決めとくとよさそうですね。 -- Yusuke Endoh