けいじゅ@日本ラショナルソフトウェアです.

In [ruby-math :00549 ] the message: "[ruby-math:00549] Re: complex.rb
problems ", on Aug/13 15:47(JST) masa / stars.gsfc.nasa.gov writes:

>田中です。


>> その前に, 議論したいことが... Rubyでは
>> 
>>   int op int -> int
>> 
>> にすると言う方針があると思いますが, ** に関しては成立していませんね. い
>> まは,

>> 1. 2 ** (-2) -> 0 に仕様変更
>
>Integer#/ との整合性もあるので、それでもよいかと思います。

他の方の意見は如何でしょう? 

>> 3. complexでは, IntegerやFloatなどの**を再定義しなくする
>> 4. 田中さんの新提案は mathn に導入する

>complex.rbで Float仕様の Math.sqrt等を Complex仕様に再定義してい
>るので、Math.pow 相当の Float#** を Complex仕様にするのは自然だ
>と思いますが、いかがでしょう。

うーん. ちょっと違うんじゃないかな? Rubyの演算メカニズムは、

  int op int -> int

同様

  T op T -> T

ってのが基礎にあり、それプラスcoerceメカニズムによる、異タイプ間演算があ
ります.

ですので, require "complex" したからといって,

  float ** float -> complex

に変るのはおかしいでしょう. complexにしたければ、明示的に

  Comlex(value) ** float

って演算すればよい.

このあたりは、require "rational" したからといって,

  int / int -> rational

にならないのと同じだと思いますが?

ただ, 副作用の大きさという点ではだいぶ違いますけどね. とにかく、ベースの
枠組みは変えないほうがよいんじゃないかしら?

あと,

>complex.rbで Float仕様の Math.sqrt等を Complex仕様に再定義してい
>るので、

こっちは... [ruby-math:00090]からの議論と絡むかな... これって結論として
どうなったのかしら?

Rubyの数値関係はいろいろ直したいところがあるけど、お互いに複雑に絡んでい
るんですよね....

>mathn って、副作用が多くてちょっと使いづらいというのもあります。
>Rationalは使いたくないけど、Float#** を Complex仕様にしたい、と
>いう場合がしばしばあります。この場合にどこで再定義するべきかとい
>うと、やはり complex ではないかしら。

うーん. 普段は、Float#cpower とかとしておいて、

Complex::change_float_power

とかよんだら振る舞いが変るとかはいかがかしら? 

>> >3. imag

>>   @image -> @imag に変更

>> 過去の互換性のため
>>   alias image imag
>> にしましょうか?
>
>そうしていただけると、realとimagで4文字でそろうので、
>コードが見やすくなってよいのではと思います。

ですよね.


__
..............................石塚 圭樹@日本ラショナルソフトウェア...
----------------------------------->> e-mail: keiju / rational.com <<---