Fortran 2003 規格には一連の組み込みモジュールが用意されています。このモジュールでは、IEEE 算術演算と C 言語との相互運用性をサポートする関数を定義します。
Fortran 2003 規格は、対象言語で新しい関数をサポートして、IEEE 算術演算および IEEE 例外を処理できるようにするために、IEEE_EXCEPTIONS、IEEE_ARITHMETIC、および IEEE_FEATURES の 3 つのモジュールを備えています。
ドラフト規格は、組み込み関数、要素別処理関数、種別関数、要素別処理サブルーチン、および非要素別処理サブルーチンのセットを定義します。これらのセットについては、次の表に記載しています。
これらの関数およびサブルーチンにアクセスするには、呼び出し側のルーチンで次のモジュールを指定する必要があります。
USE, INTRINSIC :: IEEE_ARITHMETIC, IEEE_EXCEPTIONS
詳細は、Fortran 規格 (http://www.j3-fortran.org) を参照してください。
モジュール IEEE_EXCEPTIONS には、次の問い合わせ関数が含まれています。
| 関数 | 説明 | 
| IEEE_SUPPORT_FLAG(FLAG[,X]) | プロセッサが例外をサポートしているかどうかの問い合わせ | 
| IEEE_SUPPORT_HALTING(FLAG) | プロセッサが、例外停止後の制御をサポートしているかどうかの問い合わせ | 
モジュール IEEE_ARITHMETIC には、次の問い合わせ関数が含まれています。
| 関数 | 説明 | 
| IEEE_SUPPORT_DATATYPE([X]) | プロセッサが IEEE 算術演算をサポートしているかどうかの問い合わせ | 
| IEEE_SUPPORT_DENORMAL([X]) | プロセッサが、非正規化数をサポートしているかどうかの問い合わせ | 
| IEEE_SUPPORT_DIVIDE([X]) | プロセッサが、IEEE 規格で指定されている精度での除算をサポートしているかどうかの問い合わせ | 
| IEEE_SUPPORT_INF([X]) | プロセッサが IEEE 無限大をサポートしているかどうかの問い合わせ | 
| IEEE_SUPPORT_IO([X]) | プロセッサが、書式付き入出力において IEEE 基本変換の丸めをサポートしているかどうかの問い合わせ | 
| IEEE_SUPPORT_NAN([X]) | プロセッサが IEEE 非数をサポートしているかどうかの問い合わせ | 
| IEEE_SUPPORT_ROUNDING(VAL[,X]) | プロセッサが 特別な丸めモードをサポートしているかどうかの問い合わせ | 
| IEEE_SUPPORT_SQRT([X]) | プロセッサが IEEE 平方根をサポートしているかどうかの問い合わせ | 
| IEEE_SUPPORT_STANDARD([X]) | プロセッサが IEEE のすべての機能をサポートしているかどうかの問い合わせ | 
モジュール IEEE_ARITHMETIC には、IEEE_SUPPORT_DATATYPE(X) および IEEE_SUPPORT_DATATYPE(Y) が真であるような実数 X と Y について、次の要素別処理関数が含まれています。
| 関数 | 説明 | 
| IEEE_CLASS(X) | IEEE クラス | 
| IEEE_COPY_SIGN(X,Y) | IEEE copysign 関数 | 
| IEEE_IS_FINITE(X) | 値が有限かどうかの判定 | 
| IEEE_IS_NAN(X) | 値が IEEE 非数であるかどうかの判定 | 
| IEEE_IS_NORMAL(X) | 値が正規であるかどうかの判定 | 
| IEEE_IS_NEGATIVE(X) | 値が負かどうかの判定 | 
| IEEE_LOGB(X) | IEEE 浮動小数点書式の非バイアス指数 | 
| IEEE_NEXT_AFTER(X,Y) | Y 方向に向かって、X の次の表現可能文字を返す | 
| IEEE_REM(X,Y) | IEEE REM 剰余関数 X - Y*N で、N は、実際の X/Y にもっとも近い整数を表す | 
| IEEE_RINT(X) | 現在の丸めモードに従って整数値を返す | 
| IEEE_SCALB(X,I) | X*2**I を返す | 
| IEEE_UNORDERED(X,Y) | IEEE unordered 関数。X または Y が NaN の場合は真、それ以外の場合は偽 | 
| IEEE_VALUE(X,CLASS) | IEEE 値の生成 | 
モジュール IEEE_ARITHMETIC には、次の変形関数が含まれています。
| 関数 | 説明 | 
| IEEE_SELECTED_REAL_KIND([P,][R]) | 指定した精度と範囲の IEEE 実数 に対する kind 型パラメータ値 | 
モジュール IEEE_EXCEPTIONS には、次の要素別処理サブルーチンが含まれています。
| サブルーチン | 説明 | 
| IEEE_GET_FLAG(FLAG,FLAG_VALUE) | 例外フラグの取得 | 
| IEEE_GET_HALTING_MODE(FLAG,HALTING) | 例外に対する停止モードの取得 | 
モジュール IEEE_EXCEPTIONS には、次の非要素別サブルーチンが含まれています。
| サブルーチン | 説明 | 
| IEEE_GET_STATUS(STATUS_VALUE) | 浮動小数点環境の現在の状態の取得 | 
| IEEE_SET_FLAG(FLAG,FLAG_VALUE) | 例外フラグの設定 | 
| IEEE_SET_HALTING_MODE(FLAG,HALTING) | 例外時における続行または停止の制御 | 
| IEEE_SET_STATUS(STATUS_VALUE) | 浮動小数点環境の状態の復元 | 
モジュール IEEE_ARITHMETIC には、次の非要素別サブルーチンが含まれています。
| サブルーチン | 内容の説明 | 
| IEEE_GET_ROUNDING_MODE(ROUND_VAL) | 現在の IEEE 丸めモードの取得 | 
| IEEE_SET_ROUNDING_MODE(ROUND_VAL) | 現在の IEEE 丸めモードの設定 | 
Fortran 2003 の規格には、C 言語手続きを参照する方法が用意されています。ISO_C_BINDING モジュールは、組み込みモジュール関数として 3 つのサポートプロシージャを定義します。これらの関数にアクセスするには、呼び出し側のルーチンで次の指定が必要です。
USE, INTRINSIC :: ISO_C_BINDING, ONLY: C_LOC, C_PTR, C_ASSOCIATED
モジュールで定義されるプロシージャは次のとおりです。
| 関数 | 説明 | 
|---|---|
| C_LOC(X) | 引数の C アドレスを返す | 
| C_ASSOCIATED(C_PTR_1 [, C_PTR_2]) | C_PTR_1 の結合状態を示すか、または C_PTR_1 と C_PTR_2 が同じエンティティーに関連付けられているかどうかを示す | 
| C_F_POINTER(CPTR, FPTR [, SHAPE]) | C ポインタのターゲットとポインタを関連付け、その形状を指定する | 
ISO_C_BINDING 組み込みモジュールの詳細は、Fortran 2003 規格の第 15 章 (http://www.j3-fortran.org) を参照してください。