Fortran の数値環境は柔軟性が高いため、Fortran は数値計算に最適な言語です。Fortran 標準では、数値データの精度と数値結果の丸め方を意図的に指定していません。この結果、Fortran は多様なシステム上のさまざまなアプリケーションで、効率的に機能することができます。
実数に対する計算は、期待どおりの結果にならない場合があります。これは、ハードウェアが数値を有限数のビットで表現する必要があるためです。
有限の浮動小数点数を使用した場合、次の影響があります。ハードウェアは、個々の実数を正確に表現することができないため、有限の長さに丸めるか切り捨てることで正確な表現を近似しなければなりません。さらに、一部の数値が最大および最小の指数範囲を超えているために、計算がアンダーフローまたはオーバーフローする可能性があります。1 つの例として、有限精度では、ゼロではないのにもかかわらず、加算の際にゼロとして扱われる数値が多数存在します。
有限表現の影響は、プログラミング手法を使用することで最小限に抑えることができます。例えば、LOGICAL の比較に浮動小数点数を使用しない、許容範囲を設定する (例えば、IF (ABS(x-10.0) <= 0.001))、有効ビット数よりも大きな差のある数値の加算や比較を行わない、などです。
浮動小数点数は、有限数のビットで実数を近似します。ビットは次に示す式で計算されます。表現は 2 進法なので、基底は 2 です。ビットbn は 2 進数 (0 または 1) を表しています。精度 P は、その数の非指数部 (仮数部) のビット数で、E は指数部です。2 進法浮動小数点数は、これらのパラメーターを使用して、次のように実数を近似します。
( - 1)s b0. b1b2 ... bP-1 x 2E
s は 0 または 1 (+ または -) で、範囲は Emin <= E <= Emax
次の表に、これらのパラメーターの単精度、倍精度、および 4 倍精度 (拡張精度) 形式での標準値と、符号、指数部、および数値全体のビット幅を示します。
IEEE 浮動小数点形式のパラメーター
パラメーター |
単精度 |
倍精度 |
4 倍精度または |
---|---|---|---|
符号のビット幅 |
1 |
1 |
1 |
P |
24 |
53 |
113 |
Emax |
+127 |
+1023 |
+16383 |
Emin |
-126 |
-1022 |
-16382 |
指数部の バイアス |
+127 |
+1023 |
+16383 |
指数部のビット幅 |
8 |
11 |
15 |
形式のビット幅 |
32 |
64 |
128 |
* この形式は、ソフトウェアでエミュレートされます。
したがって、b0 は暗黙的に 1 になるので、精度 24、53、および 113 を表現するために必要な実際のビット数は、それぞれ 23、52、および 112 となります。
バイアス は、指数部が正の整数になるように、すべての指数部に加えられる値です。これにより指数値の比較が簡単になります。格納される指数部は実際には次のようになります。
e = E + bias