next up previous
: matrix ライブラリのねらい : matrix ライブラリィ : matrix ライブラリィ

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

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

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

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

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

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

        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。どうやって解決しているかと言う と、実は

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



Masashi Katsurada 平成13年5月10日