next up previous
Next: 1.2 matrix ライブラリのねらい Up: 1 matrix ライブラリィ Previous: 1 matrix ライブラリィ

1.1 C 言語で数値計算するユーザーの憂鬱

最近では、 伝統的に Fortran を用いてきたような数値計算プログラミングにも、 C 言語が使われるようになってきたが、いくつか問題がある。

  1. 倍精度浮動小数点型 (double) 以外には、色々問題がある。
  2. C 言語には Fortran の整合配列 (conformant array) 機能がない。
  3. 信頼できる数値計算ライブラリィがあまり揃っていない。

問題点 1. の意味は分かりやすい。これに対しては、ANSI C 規格である程度まで解決はできたし、 倍精度計算だけで我慢することで、それほど大きな不都合が起こるわけでもない。

問題点 3. には、C 言語を使って数値計算する歴史が浅いことも原因の一つではあるが、 実は問題点 2. が大きな原因になっていると言える。そのため、単に時間が経過するだけでは問題が解決しない可能性が高い。

そこで、問題点 2. について解説しよう。整合配列とは、 不定長の寸法を持つ配列を副プログラムとの間でやり取りするための仕掛けである。 例えば FORTRAN では、
        subroutine sub(a, m, n)
        int m, n
        real a(m,n)
        ...
        end

というコードのように、 2次元配列の「寸法」 m, n を変数で受け取る副プログラムが書けて、
        real a(5,3), b(10,6)

のように宣言した 2 次元配列 a, b
        call sub(a, 5, 3)
        ...
        call sub(a, 10, 6)

のようにサブルーチンに sub 渡すことができる。

数値計算には、行列や格子点上の関数値など、 二重添字を持った数列データが現れることが多い。 Fortran をプログラミング言語に選択したユーザーは、 伝統的に 2 次元配列を用いることでそれらのデータを表現して、 うまくやってきた。その際、整合配列という仕組みは、 一般性のある サブルーチン・ライブラリィを作るためになくてはならないものであった。

C 言語に整合配列の機能がないのは、 なかなか困ったことである1。 どうやって解決しているかと言うと、実は

根本的な解決策はない
というのが本当のところであろう。


next up previous
Next: 1.2 matrix ライブラリのねらい Up: 1 matrix ライブラリィ Previous: 1 matrix ライブラリィ
Masashi Katsurada
平成18年4月29日