まつもと ゆきひろです

In message "[ruby-math:00038] Re: (summary) SingleFloat, DoubleFloat < Float"
    on 00/01/13, GOTO Kentaro <gotoken / math.sci.hokudai.ac.jp> writes:

|>んでは、Floatを抽象クラス化し、現在のFloat(将来では
|>DoubleFloat?)とほぼ同じ定義のクラスをSingleFloatにするとい
|>うのでは?
|
|おろろ?? そういうつもりです。「ほぼ同じ定義」というのがどこ
|まで同じか分かりませんが、DoubleFloat と SingleFloat は構造
|体RFloatでいえば value メンバの型だけが違うモノのつもりです。

「もっと同じ」を考えています。だって

  * float op float と double op double で結果に違いがない
  * floatにしたところでメモリが節約できるわけではない

以上、内部的にfloatで持つ必然性もないですよね。ですから、
RFloat構造体も共有するし、メソッドもほとんど同じ関数で済むは
ずです。つまり、現状のrb_cFloatに相当するrb_cDoubleFloatを
cloneすれば(で、ちょっと再定義する)良いのではと。

|>ま、その前に「本当に必要か」の議論をしなくちゃですけど。
|
|これはどのレベルの議論で十分と考えておられますか?? 
|
|ぼくのそもそもの意図はクラスによって精度が区別されるような仕
|組みにあったのですが、float が double のサブクラスになってい
|ると不自然な記述になるので、階層の変更が必要であると判断し、
|拡張ライブラリではなく Float の抽象化を含めて組み込みクラス
|として要求しているのが現状です。

まず第一に、動的なオブジェクト指向言語においては is-a の関係
は実装の共有に使われることが多く、is-aの関係で分類することは
あまり有効でない傾向があります(実際は非明示的(なことが多い)
プロトコルで決まるから)。

数の領域ではちょっと違うルールが適用されるので(もともとが階
層構造のあるモデルだから)、is-aを使う方が良いというのもひと
つの考えですし、やはり他の分野と同様is-aに依存しすぎない方が
良いというのも一つの考え方です。

私としては、「数ではis-a」という考えに特に反対はしてないんで
すが、まだ結論が出てないのは確かなので、良い機会ですからここ
で明確にしておきたいです。

次に、私はNumPyのことを全然知らないのですが、どうやら
float(SingleFloat)を必要とせずに成立しているように聞こえます。
私としてはこれが、

  * NumArrayなどのレベルでは必要でも、取り出してきた値として
    はfloatとdoubleの区別はそれほど必要ではない。

  * NumPyの連中がまだ対応していない(不自由を我慢している)だ
    け。Pythonでは基本型を簡単に組み込めないから。

のいずれかなのか、あるいはまた別の考えがあるのか判断がつきま
せん。ここについても知りたいです。

ただ、「Floatを抽象クラスに」というアイディアそのものには、
それほど反対していません(SingleFloatを作るかどうかは別として)。
ただFloatで実装できるメソッドっほとんど無いように思えるので、
「数ではis-a」に結論が出て、is-a を満足させるためだけのクラ
スが必要であるという結論が出てからにしたいですが。

# 面倒な話とお思いでしょうが、少々我慢強くおつき合いください
# ませ。

                                まつもと ゆきひろ /:|)