>From: keiju / rational.com (石塚圭樹)
>Subject: [ruby-math:00657] Re: Forward: inconsistence in class complex

> >私の [ruby-math:00543] で、 Float#** の再定義以外は
> >おおむね了承されたと思うので、こちらもお願いします。
> 
> 2. Math.sqrt(z) の修正
>
> の件ですね. 了解です. 実装は, [ruby-math:00553]でよろしいですか?

結構です。

> もうひとつ. 気になることが...
> 
> 現状のrational.rb/complex.rbのFloat#**はオリジナルの振る舞いを変えてしま
> う.
> 
> rational.rb
>   2**(-2) -> 1/4
> complex.rb
>   -2**0.5 -> √2i
> 
> これはこれで納得していたのですが, mathn.rbならともかくオリジナルの振る舞
> いを変えてしまうのは, 如何なものかと思うようになりました. 拡張した振る舞
> いを持つメソッドrpower/cpowerを定義するようにし, オリジナルの**の振る舞
> いは変更しないようにしたいと思いますが, いかがかしら?

現状では Float#** でなくて Fixnum#** のほうが再定義されています。
で、complex.rb の Fixnum#** の再定義には問題があるので取り消し、
代わりに Float#** を再定義してはどうか、というのが
[ruby-math:00543] の 1. の提案です。

とりあえず complex.rb の Fixnum#** はやめましょう。

Float#** の再定義については、あまり賛同されなかったのですが、
私の意見は、
・** に関しては T ** T -> T が必ずしも成り立つわけではない。
・もともと結果が Complex となる演算で、そのようにするだけ。
・メソッドの意味が変わるわけではない。
  int/int -> int から int/int -> rational への変更が
  「商」から「除算」へと意味が変わるのとは違う。
というところです。

田中昌宏