From: Tadayoshi Funaba Date: 2008-09-16T20:08:04+09:00 Subject: [ruby-dev:36325] mathn (#**) mahtn した場合、 (-8) ** Rational(1,3) #=> (1.0+1.73205080756888i) となりますが (1.8、1.9 ともに)、 (-8.0) ** Rational(1,3) や、(-8) ** (1.0/3) は NaN になります。 今ごろ気づいたのですが、Float での定義がないです。加えて、Integer の場 合も右辺が Rational であれば、 (-8) ** Rational(1,3) -> Rational(-8) ** Rational(1,3) -> Complex(Rational(-8)) ** Rational(1,3) という書き換えを経て望みの結果が得られるというだけで、ずばり Integer で のちゃんとした定義はないです。 遡ると 1.6.x 時代には、require 'complex' した場合に、定義されていたよう です。 1.6.8> (-8) ** (1.0/3) #=> Complex(1, 1.732050808) 1.8.0> (-8) ** (1.0/3) #=> NaN このあたりの修正がらみで、mathn 時の場合の効果ともども消えてしまったの かもしれません。