ごとけんです

In message "[ruby-math:00119] Re: (summary) SingleFloat, DoubleFloat < Float"
    on 00/01/26, Yukihiro Matsumoto <matz / netlab.co.jp> writes:
>|返事が遅くなってすみません。
>
>構いません。私に付き合ってもらってるわけですから。
>ゆっくりやりましょう。

そう言ってもらえると気が楽ではあるんですが、ぼくはあんまりゆっ
くりしたくなかったりして ^^;;

>そうなんですか? でもfloatはdoubleに格上げしてから計算するの
>がCの規格ですよね。つまり、Cでプログラムする限りfloatを使っ

ええ! そんなことないでしょう。float は float のまま計算され
ますよ。それって何かに書いてありますか??

>|えーっとあくまで私見ですがまつもとさんのおっしゃるように数の
>|場合はプロトコルが階層的に構築されいるのis-aは自然です。問題
>|は実装が共有できないということですが、他の場合と異なり、実装
>|はされていないがインターフェイスはスーパークラスで性格づけら
>|れているというのが実情でしょう。Integerのばあいは、他のクラ
>|スのようにわりと詳しくわけてあるのですが実際はFixnumもBignum
>|も同じ気分で使いますね。この辺はMix-inともまたちがうルールが
>|あると思います。
>
>この辺はもうちょっと突き詰めてみたいです。

僕が思うに、数のメソッドというのはもともと数学関数で、
Integer#[] のようなのはどちらかというと変わりだねでしょう。
数学関数は実数で定義されたモノが多いわけですが、一方で、値域
が定義域に一致するかという考え方があります。たとえば除法は整
数で閉じていませんし、減法は自然数で閉じていません。これに対
して定義域を拡大するというやりかたと値域を制限するやりかたが
あって、前者は除法のために有理数を作ることに相当し、後者は x
< y のとき x - y := 0 とするようなことです(自然数は0からはじ
まるとして ^^;)

いにしえの言語から、整数の算術は整数で閉じていたのですが、実
際のところは型による支配が聞いていたのだと思います。それはそ
れで便利なことも多いので改めてそこを変える必要は感じないので
すが、プロトコルとしての演算は少なくとも思考上は存在します。
これを自然に書こうとするならば、Numericに関してはオブジェク
ト指向そのものとはちょっと違った規則でモノを考える必要があり
そうです。

ただ個別の問題に関してはそれなりの議論を出来るけれど、本質的
には松尾さんが示してくれたようなモノを検討する必要を感じます。

# んで、なかなか考える時間が取れなくて。時間の使い方が下手な
# だけなんだろうけど。

>|それから、前に戻すと動的な言語でどうするかという話がありまし
>|たが、浮動小数点数の規格でもディスティネーションの型と演算結
>|果の型は独立に定義される概念で、指針が与えられているので結果
>|をどうするかという問題は改めて考える必要は無いです。
>
>この文章はちょっと分かりませんでした。動的型の言語ではディス
>ティネーションの型というものが存在しないので演算結果の型をそ
>のまま用いれば良いと言う意味ですかね。

そういうことです。

>ふうむ、「a+0.5 は 0.5 をfloatに変換すれば」と思っていたんで
>すが、精度の点からは望ましくないものなんでしょうか。

それでうまく行く場合も多いですが、実際は場合によりけりでしょ
う。すぐには分かりません。

-- gotoken