From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?=) Date: 2011-06-17T16:33:53+09:00 Subject: [ruby-dev:43841] Re: [Ruby 1.9 - Feature #4878][Open] CMath に frexp, ldexp, hypot の3関数は不要ではないか けいじゅ@いしつかです. In [ruby-dev:43840] the message: "[ruby-dev:43840] Re: [Ruby 1.9 - Feature #4878][Open] CMath に frexp, ldexp, hypot の3関数は不要ではな いか", on Jun/17 15:37(JST) Yusuke ENDOH writes: >遠藤です。 >> def cbrt(z) >> if z.real? >> cbrt!(z) >> else >> Complex(z) ** (1.0/3) >> end >> end >> これだと, CMath.cbrt(-8) と CMath.cbrt(Complex(-8,0)) で値が異なってき >> ています. この点についてどう考えています? >なんと。 >それは cbrt(-8) で -2 を返すようにした際の私の修正の「バグ」です。 >Complex(-8, 0).real? が false とは想定外でした。 メソッド名が悪かったかなぁ. それはともかく, CMath.cbrt(-8) == CMath.cbrt(Complex(-8,0)) となる, 自然な実装(正則(連続)になる複素関数)は 主値を取るメソッド: def cbrt(z) Complex(z) ** (1.0/3) end 以外ないので, これで納得してもらえます? __ ---------------------------------------------------->> 石塚 圭樹 <<--- ---------------------------------->> e-mail: keiju@ishitsuka.com <<---