FORTRANのひけつ 2
多次元配列の記憶順序FORTRAN77では多次元(7次元まで)の配列を定義できますが,実際の記憶装置が 多次元構造を持っているわけではなくて,1次元的に管理されています.多次 元配列を1次元的に展開する順序は,FORTRAN77の規格で定めてありますから, 多次元配列を1次元配列と結合することが可能です.
例えば
REAL X(6), Y(2,3)
COMPLEX Z(3)
EQUIVALENCE (X,Y,Z)という場合,変数 X, Y, Z はどれも長さが6語の配列で, EQUIVALENCE文により同じ記憶領域を占めます.この時, それぞれの変数の並 び方は
+----------+----------+----------+----------+----------+----------+ | X(1) | X(2) | X(3) | X(4) | X(5) | X(6) | |----------|----------|----------|----------|----------|----------| | Y(1,1) | Y(2,1) | Y(1,2) | Y(2,2) | Y(1,3) | Y(2,3) | |----------|----------|----------|----------|----------|----------| | Re(Z(1)) | Im(Z(1)) | Re(Z(2)) | Im(Z(2)) | Re(Z(3)) | Im(Z(3)) | +----------+----------+----------+----------+----------+----------+
という様に,2次元配列 Y は添字の左側の数字から変るように1次元的 に展開されます.また,複素数データ Z は2つの実数が並んだ形で展開 されます.したがって,X(3) の数値は,Y(1,2), Re(Z(2)) と同じになります.
この規則は多くのプログラムで積極的に使われており,多次元配列を1次元配 列として扱ったり,複素数データを実数データと見なして処理したりすること が行われています.この規則は,計算機のハードウェアに近い部分の規則なの で,計算機によって異なるように思えるかもしれませんが,FORTRAN77規格で 定められた「標準語」です.例えば,「岩波FORTRAN辞典」(西村恕彦/酒井俊 夫・高田正之 著)の「記憶列の結合」を御覧下さい.
NUMAGUTI Atusi <a1n@gfdl.gov> Last Modified: Thu Aug 31 13:11:16 EDT 1995