SETCONTROLFPQQ (ia32 のみ)

実行時サブルーチン:プロセッサーの浮動小数点コントロール・ワードの値を設定します。このルーチンは,ia32 (x86) プロセッサーのみで利用可能です。

モジュールUSE DFLIB

形式

CALL SETCONTROLFPQQ (controlword)

controlword
(入力) INTEGER(2)。プロセッサーの浮動小数点コントロール・ワード。

浮動小数点コントロール・ワードは,様々な例外条件が浮動小数点算術コプロセッサーでどのように処理されるかを指定し,浮動小数点精度を設定し,使用する浮動小数点丸めメカニズムを指定します。

DFLIB.F90 モジュール・ファイル (\DF98\INCLUDE サブディレクトリ) は,次表のようなコントロール・ワードの定義値を含んでいます。

パラメタ名 16 進値 説明
FPCW$MCW_IC #1000 無限大の制御マスク
FPCW$AFFINE #1000 アフィン無限大
FPCW$PROJECTIVE #0000 射影的無限大
FPCW$MCW_PC #0300 精度制御マスク
FPCW$64 #0300 64 ビット精度
FPCW$53 #0200 53 ビット精度
FPCW$24 #0000 24 ビット精度
FPCW$MCW_RC #0C00 丸めの制御マスク
FPCW$CHOP #0C00 切り捨て
FPCW$UP #0800 大きい方へ丸める
FPCW$DOWN #0400 小さい方へ丸める
FPCW$NEAR #0000 最も近い値に丸める
FPCW$MCW_EM #003F 例外マスク
FPCW$INVALID #0001 無効な数値を許容する
FPCW$DENORMAL #0002 規格化されていない数 (きわめて小さい数値) を許容する
FPCW$ZERODIVIDE #0004 ゼロによる除算を許容する
FPCW$OVERFLOW #0008 オーバーフローを許容する
FPCW$UNDERFLOW #0010 アンダーフローを許容する
FPCW$INEXACT #0020 不正確な精度を許容する

浮動小数点コントロール・ワードの基本設定は,53 ビット精度,最も近い値に丸める,および規格化されていない数,アンダーフロー,オーバーフロー,無効な値,および不正確な精度の例外を無効にするです。例外は,そのフラグが 1 に設定されていれば無効で,0 にクリアされていれば有効です。

使用している浮動小数点制度標準に敏感な古いプログラムを再利用している場合や,古いマシンと同じ結果を得たい場合に,浮動小数点精度と丸めメカニズムを設定することは有用です。

GETCONTROLFPQQ で現在のコントロール・ワードを取り出すことができ,SETCONTROLFPQQ でコントロール・ワードを変更することができます。多くのユーザーは,基本設定を変更する必要はありません。コントロール・ワードを変更する必要がある場合,浮動小数点スタック例外や異常な伝播を処理する特殊なルーチンが正しく動作することを確認するために,常に SETCONTROLFPQQ を使用します。

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

Visual Fortran の例外ハンドラは,不正な操作のソフトウェア・マスクを許可していますが,それらをマス・チップがマスクすることを許可していません。ソフトウェア・マスクを使用する場合,Visual Fortran で書かれたプログラムを別のコンパイラでコンパイルする場合に,プログラムの性能に影響することに注意してください。

互換性

CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB

関連情報

GETCONTROLFPQQGETSTATUSFPQQLCWRQQSCWRQQ

	USE DFLIB
	INTEGER(2) status, control, controlo

	CALL GETCONTROLFPQQ(control)
	WRITE (*, 9000) 'Control word: ', control
	! 古いコントロール・ワードを保存します。
	controlo = control
	! すべてのフラグをクリアします。
	control = control .AND. #0000
	! 新しいコントロールに丸めを設定します。
	control = control .OR. FPCW$UP
	CALL SETCONTROLFPQQ(control)
	CALL GETCONTROLFPQQ(control)
	WRITE (*, 9000) 'Control word: ', control
	9000 FORMAT (1X, A, Z4)
	END