まつもと ゆきひろです

In message "[ruby-math:00117] Re: LA with Ruby"
    on 00/01/26, GOTO Kentaro <gotoken / math.sci.hokudai.ac.jp> writes:

|パラメータつきクラスというのは、クラス名と同名の関数がクラス
|を返すというもので、たとえば、Matrix に対して、
|
| Matrix(DoubleFloat)
|
|は型がdoubleの行列クラスを表します。

LAPACKとそのRubyインタフェースについての知識がゼロなのではず
している可能性が高いのですが、

 Matrix(DoubleFloat)

は結局Matrixの中でcaseとかで分岐したりするのではないでしょう
か? それだとあんまり parameterized class にする価値はなさそ
うに思います。保守性も下がるし。

# Rubyの配列で実現するプロトタイプの実装だけならこれで構わな
# いでしょうが。

で、それはそれとして。

double な Matrix を DoubleFloatMatrix だと仮定して、そのイン
スタンスを dm とした場合、インスタンスそのものが自分の要素の
型情報を持っているので

  * dmから1要素を取り出す -> (現状の)Float
  * dmに1要素をセット     -> doubleに変換

を行い、SingleFloatMatrix sm について

  * dmから1要素を取り出す -> (現状の)Float
  * dmに1要素をセット     -> floatに変換

を行うことで、型の問題は片付くように感じます。
単純すぎ?

doubleで表現できない精度の浮動小数点数とかのことを考えると、
Floatの抽象クラス化が不要とは申しませんが。

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