GETSTATUSFPQQ (ia32 のみ)

実行時サブルーチン:プロセッサーの浮動小数点ステイタス・ワードを返します。このルーチンは,ia32 プロセッサーのみで利用可能です。

モジュールUSE DFLIB

形式

CALL GETSTATUSFPQQ (status)

status
(出力) INTEGER(2)。プロセッサーの浮動小数点ステイタス・ワード。

浮動小数点ステイタス・ワードは,様々な浮動小数点例外条件が発生したかどうかを示します。Visual Fortran は初期値としてすべてのステイタス・フラグをクリア (0 に設定) していますが,例外が発生した後,付加的な浮動小数点演算を行う前にフラグをリセットしません。1 に設定されたステイタス・フラグは,対応する例外が少なくとも 1 回発生したことを示しています。以下の表は,ステイタス・フラグと値を示しています。

パラメタ名 16 進値 説明
FPSW$MSW_EM #003F ステイタス・マスク(すべてのビットを1に設定)。
FPSW$INVALID #0001 無効な結果が発生した。
FPSW$DENORMAL #0002 規格化されていない数 (きわめて小さい数値) が発生した。
FPSW$ZERODIVIDE #0004 ゼロによる除算が起きた。
FPSW$OVERFLOW #0008 オーバーフローが起きた。
FPSW$UNDERFLOW #0010 アンダーフローが起きた。
FPSW$INEXACT #0020 不正確な精度が発生した。

上記の表の 6 つの浮動小数点例外のどれが発生したかを決定するために,GETSTATUSFPQQ で返されるステイタス・ワードの論理比較を使います。

フラグが 1 に設定されている場合は例外は無効で,0 にクリアされている場合は例外は有効です。基本設定では,規格化されていない数,アンダーフロー,および不正確な精度の例外が無効で,無効な値,オーバーフロー,およびゼロによる除算の例外が有効になっています。例外は,SETCONTROLFPQQ でフラグをクリアと設定することで有効と無効にすることができます。GETCONTROLFPQQ を使って,例外の有効と無効を知ることができます。

例外が無効にされると,それが発生した時の割り込みが発生しません。その代わりとして,浮動小数点プロセスは適切な特別な値 (NaN または符号付き無限大) を生成しますが,プログラムは継続されます。(もしあれば) GETSTATUSFPQQ を呼び出すことで,例外の発生を検出することができます。

浮動小数点例外でのエラーが有効 (SETCONTROLFPQQ でフラグを 0 にクリアすることで) になっている場合,オペレーティング・システムは例外が発生した時に割り込みを生成します。基本設定では,これらの割り込みは実行時エラーを引き起こしますが,SIGNALQQ で割り込みを捕らえ,自分のエラー処理ルーチンに分岐させることができます。

浮動小数点ステイタス・ワード,例外,エラー処理に関しての詳細は,「浮動小数点環境」を参照してください。

互換性

CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB

関連情報

GETCONTROLFPQQMATHERRQQSETCONTROLFPQQSIGNALQQ

	! GETSTATUSFPQQ の例
	USE DFLIB
	INTEGER(2) status

	CALL GETSTATUSFPQQ(status)
	! ゼロによる除算の検証
	IF (IAND(status, FPSW$ZERODIVIDE) .NE. 0) THEN
	   WRITE (*,*) 'Divide by zero occurred. Look    &
	   for NaN or signed infinity in resultant data.'
	END IF
	END