コンパイラは、特別な IEEE 極値を返すために呼び出すことができる関数のセットを提供します。無限大や最小の正規化数などの値は、アプリケーションプログラムの中で直接使用できます。
例: 収束のテストはハードウェアによってサポートされる最小数に基づき、次のようになります。
IF ( delta .LE. r_min_normal() ) RETURN |
利用できる値を次の表にリストします。
表 6–3 IEEE の値を使用する関数
IEEE の値 |
倍精度 |
単精度 |
---|---|---|
infinity (無限大) |
d_infinity() |
r_infinity() |
quiet NaN (シグナルを発しない非数) |
d_quiet_nan() |
r_quiet_nan() |
signaling NaN (シグナルを発する非数) |
d_signaling_nan() |
r_signaling_nan() |
min normal (最小の正規化数) |
d_min_normal() |
r_min_normal() |
min subnormal (最小の非正規化数) |
d_min_subnormal() |
r_min_subnormal() |
max subnormal (最大の非正規化数) |
d_max_subnormal() |
r_max_subnormal() |
max normal (最大の正規化数) |
d_max_normal() |
r_max_normal() |
2 つの NaN 値 (quiet と signaling) は順序がないものなので、IF(X.ne.r_quiet_nan())THEN... のように比較の中で使用してはいけません。値が NaN であるかどうかを判別するときは、ir_isnan(r) か id_isnan(d) 関数を使用します。
これらの関数の Fortran 名は、次のマニュアルページにリストされています。
libm_double(3f)
libm_single(3f)
ieee_functions(3m)
また、次も参照してください。
ieee_values(3m)
floatingpoint.h ヘッダーファイルと floatingpoint(3f)