In message "[ruby-math:00120] Re: LA with Ruby"
    on 00/01/26, Yukihiro Matsumoto <matz / netlab.co.jp> writes:

>LAPACKとそのRubyインタフェースについての知識がゼロなのではず
>している可能性が高いのですが、
>
> Matrix(DoubleFloat)
>
>は結局Matrixの中でcaseとかで分岐したりするのではないでしょう
>か? それだとあんまり parameterized class にする価値はなさそ
>うに思います。保守性も下がるし。
>
># Rubyの配列で実現するプロトタイプの実装だけならこれで構わな
># いでしょうが。

もちろん定義は別になります。ここでは単に名前を決めないで議論
するためだけの存在です。

>double な Matrix を DoubleFloatMatrix だと仮定して、そのイン
>スタンスを dm とした場合、インスタンスそのものが自分の要素の
>型情報を持っているので
>
>  * dmから1要素を取り出す -> (現状の)Float
>  * dmに1要素をセット     -> doubleに変換
>
>を行い、SingleFloatMatrix sm について
>
>  * smから1要素を取り出す -> (現状の)Float
>  * smに1要素をセット     -> floatに変換
>
>を行うことで、型の問題は片付くように感じます。
>単純すぎ?

いや、それはそうなんだけど、それだと float のインスタンスを
持てないですよね。それにユーザーが把握すべきことが複雑だと思
います。たとえば、単精度だけからなる配列からLAPACK形式の配列
を作るのに、違うメソッドを呼ぶ必要があります。

ary1 = [[0.1s, 0.2s],[0.3s, 0.4s]]
ary2 = [[0.1s, 0.2d],[0.3s, 0.4s]]

m1 = Matrix[*ary1]
m2 = Matrix[*ary2]

をわざわざ

m1 = Matrix(SingleFloat)[*ary1]
m2 = Matrix(DoubleFloat)[*ary2]

と書くのは、LAPACKを生で使うような息苦しさを感じます。つまり、
必要に応じて精度の制御をユーザが行えるけれど、そうでなければ
それなりにやってくれるのがRubyでつかうメリットでは無いかしら。

# しかし、どうしてそんなに float が嫌われるのだろう…double
# と全然違うモノなのに

-- gotoken