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

In [ruby-math :00561 ] the message: "[ruby-math:00561] Re: complex.rb
problems ", on Aug/16 09:26(JST) 正木 功 writes:

>正木です。

>|うーん. ちょっと違うんじゃないかな? Rubyの演算メカニズムは、
>|  int op int -> int
>|同様
>|  T op T -> T
>|ってのが基礎にあり、それプラスcoerceメカニズムによる、異タイプ間演算があ
>|ります.

正木さんは、現状の枠組みを変えたほうがよいと主張されているわけですよね?

>私も自然数の 1 ,有理整数の 1,有理数の Rational(1,1),実数の 1,複素数の
>Complex(1,0) はそれぞれ違うものだとは思っていますが、実用的にはそれらを
>区別する必要は殆んど無く、むしろ
>
>4/2 :Integer
>4/3 :Rational
>(4/3)/(2/3) :Integer
>
>(3/2)*(2/3) :Integer
>Complex(1,1)*Complex(1,-1) :Integer
>
>sqrt(4) :Integer
>sqrt(2) :real
>sqrt(-1) :complex
>Complex(3,4).abs=5 :Integer
>
>2**(-2) :Rational
>2**(-1/2) :real
>Complex(a,b)**0=1  :Integer
>
>のように、柔軟に対応してくれた方がずっと使いやすいと思います。
>T:Numeric と考えれば上の原則にも反していないと思いますが。
>異タイプというのは Vector とか Matrix のことでしょう。
>
>但し Float は便宜上のもので、本当の数とは認められないので
>(p ((1.0/49)*49==1.0) => false
>p (1+1e-16 != 1) => false
>p (Math.sqrt(2)**2==2) => false
>等の現象のため矛盾の無い体系が作れません。
>大体数学的には浮動小数点数などという数はありません。)
>これは異タイプとして別扱いにすべきものと思います。

言いたいことは非常によく分ります。この動作はmathnと基本的に同じですから。
ちなみに、mathnはrationalとかcomplexと同時に作成しています。これがないと
嬉しくないことが多いのは分っていたからですね. 

それはともかく, 上記の案は,

   int / int -> rational

の話のさらにその先にはこういう話も含まれていますね. 私も、基本的にはこの
方向に持っていきたいと思っていました。

## 細かいところは違いますが. 

>|1. 2 ** (-2) -> 0 に仕様変更
>
>こんな不自然なことを考えないといけないという事自体が、今の仕様に無理が
>ある証拠です。

不自然と言うか, 2/4 -> 0 より自然に導かれると思うけど. だから、今の仕様
が不自然なのか(^^;;;

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