最近では、 伝統的に Fortran を用いてきたような数値計算プログラミングにも、 C 言語が使われるようになってきたが、いくつか問題がある。
問題点 1. の意味は分かりやすい。これに対しては、ANSI C 規格である程度まで解決はできたし、 倍精度計算だけで我慢することで、それほど大きな不都合が起こるわけでもない。
問題点 3. には、C 言語を使って数値計算する歴史が浅いことも原因の一つではあるが、 実は問題点 2. が大きな原因になっていると言える。そのため、単に時間が経過するだけでは問題が解決しない可能性が高い。
そこで、問題点 2. について解説しよう。整合配列とは、 不定長の寸法を持つ配列を副プログラムとの間でやり取りするための仕掛けである。 例えば FORTRAN では、
subroutine sub(a, m, n) int m, n real a(m,n) ... end |
real a(5,3), b(10,6) |
call sub(a, 5, 3) ... call sub(a, 10, 6) |
数値計算には、行列や格子点上の関数値など、 二重添字を持った数列データが現れることが多い。 Fortran をプログラミング言語に選択したユーザーは、 伝統的に 2 次元配列を用いることでそれらのデータを表現して、 うまくやってきた。その際、整合配列という仕組みは、 一般性のある サブルーチン・ライブラリィを作るためになくてはならないものであった。
C 言語に整合配列の機能がないのは、 なかなか困ったことである1。 どうやって解決しているかと言うと、実は