ごとけんです

返事が遅くなってすみません。

In message "[ruby-math:00045] Re: (summary) SingleFloat, DoubleFloat < Float"
    on 00/01/14, Yukihiro Matsumoto <matz / netlab.co.jp> writes:

>|おろろ?? そういうつもりです。「ほぼ同じ定義」というのがどこ
>|まで同じか分かりませんが、DoubleFloat と SingleFloat は構造
>|体RFloatでいえば value メンバの型だけが違うモノのつもりです。
>
>「もっと同じ」を考えています。だって
>
>  * float op float と double op double で結果に違いがない

これなんですけど、どうもあんまりよくないようです。実例がまだ
見つかりませんが、IEEE754をみると一旦精度を上げて計算するこ
とはそのあとで丸めをすることになるので良くないとされています。

直接はちょっと違うんですが、倍精度についてユークリッド距離 
\sqrt{x^2+y^2} を求める際に、x^2+y^2を拡張倍精度に格上げして
から平方根を倍精度に落して計算すると丸めが処理系によって違う
ことがあり得るという話があります。このような話はいまのところ 
intel が主流なんで、問題が顕在してませんがRubyが広く使われる
ようになると表に出てくる恐れがあります。

これと直接関係があるかどうかは調査中ですが、カオスだと処理系
ごとで結果が全然違うようなモデルも知られています。もっとも
IEEE非準拠の処理系もあるのでulpのちがいが主に効いているので
はありますが。

>  * floatにしたところでメモリが節約できるわけではない

こっちには同意します。

>まず第一に、動的なオブジェクト指向言語においては is-a の関係
>は実装の共有に使われることが多く、is-aの関係で分類することは
>あまり有効でない傾向があります(実際は非明示的(なことが多い)
>プロトコルで決まるから)。
>
>数の領域ではちょっと違うルールが適用されるので(もともとが階
>層構造のあるモデルだから)、is-aを使う方が良いというのもひと
>つの考えですし、やはり他の分野と同様is-aに依存しすぎない方が
>良いというのも一つの考え方です。
>
>私としては、「数ではis-a」という考えに特に反対はしてないんで
>すが、まだ結論が出てないのは確かなので、良い機会ですからここ
>で明確にしておきたいです。

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

それから、前に戻すと動的な言語でどうするかという話がありまし
たが、浮動小数点数の規格でもディスティネーションの型と演算結
果の型は独立に定義される概念で、指針が与えられているので結果
をどうするかという問題は改めて考える必要は無いです。

>次に、私はNumPyのことを全然知らないのですが、どうやら
>float(SingleFloat)を必要とせずに成立しているように聞こえます。
>私としてはこれが、
>
>  * NumArrayなどのレベルでは必要でも、取り出してきた値として
>    はfloatとdoubleの区別はそれほど必要ではない。
>
>  * NumPyの連中がまだ対応していない(不自由を我慢している)だ
>    け。Pythonでは基本型を簡単に組み込めないから。
>
>のいずれかなのか、あるいはまた別の考えがあるのか判断がつきま
>せん。ここについても知りたいです。

僕も田中さんと同じような印象しか持ってないのですが、少なくと
もプロトタイピングには猛烈に不便です。いつぞや日本のPythonの
リストで整数に型があるのがいいかどうかって話がありましたが、
数値計算の場合は呼ぶ関数自体が違うのでその辺の検証や労力の見
積りがやりにくいです。

-- gotoken