ごとけんです

In message "[ruby-math:00419] Re: Numeric.new"
    on 01/03/25, IKEGAMI Daisuke <daisu-ik / is.aist-nara.ac.jp> writes:
>僕がわかってないだけなのかもしれませんが,
>定数 Zero と Unit を用意する代わりに,
>述語 zero? と unit? があれば用事は足りませんか.
>
>どんなときに定数が必要になるのでしょう.

僕がZEROの必要性として出している例は、Enumerable#sum です。
sum の初期値は零であって欲しいのだけど、平均を取る場合は整数
の零では困ります。もちろん sum/Float(size) でもいいけど、そ
うすると今度は sum が size の整数倍のときに不要な誤差が入り
ます。言い換えれば Numeric#ZERO というよりは和をもつすべての
クラスに ZERO を与えたいと言うことです。

>述語で用が足りるのならば,定数を用意する必要はなさそうです.
>というのは,僕は(今のところ) Numeric のサブクラスは
>今以上に新しく増えないと考えているからです.

Quotanion (ぼそっ)

>Numeric には <=>, [ceil, floor, truncate, round] があるので,
>Numeric のサブクラスは,次の 2 つの条件が要請されると僕は思います.
> 1) 全順序が具体的に構成できる(評価できる)
> 2) 距離空間であり,Z を含んでいる
>    (または 距離を保つ Z からの単射準同型が具体的に計算できる)

NumericのサブクラスがNumericのすべてのメソッドをサポートする
必要はないでしょう。ComplexがNumericであるというのは至極自然
に思えます。

別の視点としては、Numericは数学的構造としてでなく numerical
computation のためのクラスでもあることを考えると多少気持ちが
紛れるかも知れません。なにせ計算機なので。

>一方で Matrix や Polynomial が Z や R に限らず,
>任意の可換環を成分ないしは係数に持ちたいという気持ちから,
>僕は可換環を示す抽象クラス(ないしはモジュール)が欲しくなります.
>計算速度を気にしなければ,成分ないしは係数が任意の可換環の元である
>というだけの制約のもとで計算を行う直観的なアルゴリズムがあるからです.

そうなんですが、台に包含関係があるような集合間で代数をつくる
には、coercing ではどうしても書きづらく、なんらかの型ベース
の method signature が必要だと僕は考えています。

-- Gotoken