Sun Studio 12: Fortran ライブラリ・リファレンス

2.2 Fortran 2003 モジュールルーチン

Fortran 2003 規格には一連の組み込みモジュールが用意されています。このモジュールでは、IEEE 算術演算と C 言語との相互運用性をサポートする関数を定義します。

2.2.1 IEEE 算術演算と例外のモジュール

Fortran 2003 規格は、対象言語で新しい関数をサポートして、IEEE 算術演算および IEEE 例外を処理できるようにするために、IEEE_EXCEPTIONSIEEE_ARITHMETIC、および IEEE_FEATURES の 3 つのモジュールを備えています。

ドラフト規格は、組み込み関数、要素別処理関数、種別関数、要素別処理サブルーチン、および非要素別処理サブルーチンのセットを定義します。これらのセットについては、次の表に記載しています。

これらの関数およびサブルーチンにアクセスするには、呼び出し側のルーチンで次のモジュールを指定する必要があります。

USE, INTRINSIC :: IEEE_ARITHMETIC, IEEE_EXCEPTIONS

詳細は、Fortran 規格 (http://www.j3-fortran.org) を参照してください。

2.2.1.1 問合せ関数

モジュール 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 のすべての機能をサポートしているかどうかの問い合わせ 

2.2.1.2 要素別処理関数

モジュール IEEE_ARITHMETIC には、IEEE_SUPPORT_DATATYPE(X) および IEEE_SUPPORT_DATATYPE(Y) が真であるような実数 XY について、次の要素別処理関数が含まれています。

関数 

説明 

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 値の生成 

2.2.1.3 種別関数

モジュール IEEE_ARITHMETIC には、次の変形関数が含まれています。

関数 

説明 

IEEE_SELECTED_REAL_KIND([P,][R])

指定した精度と範囲の IEEE 実数 に対する kind 型パラメータ値 

2.2.1.4 要素別処理サブルーチン

モジュール IEEE_EXCEPTIONS には、次の要素別処理サブルーチンが含まれています。

サブルーチン 

説明 

IEEE_GET_FLAG(FLAG,FLAG_VALUE)

例外フラグの取得 

IEEE_GET_HALTING_MODE(FLAG,HALTING)

例外に対する停止モードの取得 

2.2.1.5 非要素別処理サブルーチン

モジュール 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 丸めモードの設定 

2.2.2 C 結合モジュール

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_1C_PTR_2 が同じエンティティーに関連付けられているかどうかを示す

C_F_POINTER(CPTR, FPTR [, SHAPE])

C ポインタのターゲットとポインタを関連付け、その形状を指定する 

ISO_C_BINDING 組み込みモジュールの詳細は、Fortran 2003 規格の第 15 章 (http://www.j3-fortran.org) を参照してください。