インテル® Fortran コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
各種のコンピューターにおけるデータ格納は、リトルエンディアンまたはビッグエンディアンの格納規則を使用します。格納方法の規則は、一般に、複数のバイトにわたる数値に次のように適用されます。
リトルエンディアンでの格納:
最下位ビット (LSB) の値は、最も小さいアドレスのバイトに含まれています。
最上位ビット (MSB) の値は、最も大きいアドレスのバイトに含まれています。
数値のアドレスは、LSB を含むバイトです。それ以降の大きいアドレスのバイトには、より上位のビットが含まれています。
ビッグエンディアンでの格納:
最下位ビット (LSB) の値は、最も大きいアドレスのバイトに含まれています。
最上位ビット (MSB) の値は、最も小さいアドレスのバイトに含まれています。
数値のアドレスは、MSB を含むバイトです。それ以降の大きいアドレスのバイトには、より下位のビットが含まれています。
インテル® Fortran は、数値データがネイティブ・リトルエンディアン順になっていると想定します。これは、最下位の最右端の 0 ビット (ビット 0) またはバイトに、最上位の最左端のビット (またはバイト) よりも下位のアドレスが割り当てられる方式です。
次の図は、この 2 つのバイト順方式の違いを示したものです。
次の図は、ワード内のバイト・アドレス指定における、この 2 つの規則の違いを示しています。
この 2 つの規則では、サブコンポーネントとして格納されるデータ型 (ワード内のバイト) は、対応するワード内の異なる場所に格納されます。次の図は、この 2 つの規則におけるいくつかのデータ型表現の違いを示しています。文字は 8 ビットの文字型データを表しており、数字は 32 ビットの整数型データに対する 8 ビットの部分的な拠出分を表しています。
ワード内の文字型および整数型データ: (a) ビッグエンディアン、(b) リトルエンディアン
図の左半分には、ビッグエンディアンのワードからリトルエンディアンのワードに連続的にバイトを転送した場合 (ビッグエンディアンのバイト 0 をリトルエンディアンのバイト 0 に、ビッグエンディアンのバイト 1 をリトルエンディアンのバイト 1 に、... というように)、リトルエンディアンのワード内にデータがどのように格納されるかを示しています。1 バイトのサイズのデータ (この例では文字型) は正しい順序になりますが、整数型データは元のバイナリー値を正しく表していないことに注意してください。図の右半分には、正しい 32 ビット整数値を再現するために、ワードの中央を中心にバイトをスワップする必要があることを示しています。バイトをスワップした後は、上記の図は同じになります。
上の例を一般化して、浮動小数点のデータ型と、マルチワードのデータ型も同じように考えることができます。
書式なしデータファイルをビッグエンディアンとリトルエンディアンのコンピューター間で移動するためには、データを変換する必要があります。
インテル® Fortran は、プログラムがいくつかの非ネイティブ浮動小数点形式とビッグエンディアンの INTEGER または浮動小数点形式で、書式なしデータ (もともと書式なし I/O 文で書き出されたもの) を読み書きする機能を提供しています。サポートされている非ネイティブ浮動小数点形式には、OpenVMS* VAX システム対応 Digital* FORTRAN がサポートしている Compaq* VAX* リトルエンディアン浮動小数点形式、Sun Microsystems* システムと IBM* RISC System/6000* システムの大部分で使用されている標準 IEEE* ビッグエンディアン浮動小数点形式、IBM 浮動小数点形式 (IBM* の System/370* とこれに似たシステムで使用されているもの)、および CRAY* 浮動小数点形式などがあります。
一般に、書式なしデータの変換は書式付きデータの変換よりも高速で、浮動小数点数の精度が失われる可能性も低くなります。データの前後にレコード長を含む書式なしファイルでは、ビッグエンディアン変換を指定すると、レコード長がビッグエンディアンとして解釈されます。
警告:
インテル® Fortran コンパイラーは、データ変換を組込み型 (REAL、INTEGER など) の I/O リスト項目にのみ適用します。派生型の I/O リスト項目は変換されません。
ネイティブメモリー形式には、リトルエンディアン整数とリトルエンディアンの IEEE* 浮動小数点形式、REAL(KIND=4) 宣言と COMPLEX(KIND=4) 宣言の IEEE* binary32、REAL(KIND=8) 宣言と COMPLEX(KIND=8) 宣言の IEEE* binary64、REAL(KIND=16) 宣言と COMPLEX(KIND=16) 宣言の IEEE* binary128 があります。
次の表は、サポートされている非ネイティブ書式なしファイル形式のキーワードとそのデータ型のリストです。
キーワード |
説明 |
---|---|
BIG_ENDIAN |
適切なサイズ (1 バイト、2 バイト、4 バイト、8 バイト) のビッグエンディアン整数データと、REAL および COMPLEX の拡張単精度数/拡張倍精度数の IEEE* 浮動小数点形式。INTEGER(KIND=1) データはリトルエンディアンとビッグエンディアンで同じです。 |
CRAY |
適切なサイズ (1 バイト、2 バイト、4 バイト、8 バイト) のビッグエンディアン整数データと、REAL および COMPLEX の単精度数/倍精度数のビッグエンディアン CRAY 独自の浮動小数点形式。 |
FDX |
適切なサイズ (1 バイト、2 バイト、4 バイト、8 バイト) のリトルエンディアン整数データと、次のリトルエンディアン独自の浮動小数点形式。
|
FGX |
適切なサイズ (1 バイト、2 バイト、4 バイト、8 バイト) のリトルエンディアン整数データと、次のリトルエンディアン独自の浮動小数点形式。
|
IBM |
適切な INTEGER サイズ (1 バイト、2 バイト、4 バイト、8 バイト) のビッグエンディアン整数データと、REAL および COMPLEX の単精度数/倍精度数のビッグエンディアン IBM* 専用 (System/370 とこれに似たシステムで使われているもの) 浮動小数点形式。 |
LITTLE_ENDIAN |
適切な INTEGER サイズ (1 バイト、2 バイト、4 バイト、8 バイト) のネイティブ・リトルエンディアン整数と、次のネイティブ・リトルエンディアン IEEE 浮動小数点形式。
これらのデータ型のサポートされている範囲についての詳細は、「ネイティブ IEEE* 浮動小数点の表現」を参照してください。 |
NATIVE |
メモリーとディスクの間で変換は行われません。これは書式なしファイルにおけるデフォルトです。 |
VAXD |
適切な INTEGER サイズ (1 バイト、2 バイト、4 バイト、8 バイト) のネイティブ・リトルエンディアン整数と、次のリトルエンディアン VAX 独自の浮動小数点形式。
|
VAXG |
適切な INTEGER サイズ (1 バイト、2 バイト、4 バイト、8 バイト) のネイティブ・リトルエンディアン整数と、次のリトルエンディアン VAX 独自の浮動小数点形式。
|
非ネイティブ形式を読み取ると、ディスク上の非ネイティブ形式はメモリー上のネイティブ形式に変換されます。変換後の非ネイティブ値がネイティブデータ型の範囲を超えている場合、ランタイムメッセージが表示されます。