実行時サブルーチン:プロセッサーの浮動小数点コントロール・ワードを返します。このルーチンは,ia32 プロセッサーのみで利用可能です。
モジュール:USE DFLIB
形式
CALL GETCONTROLFPQQ (controlword)
controlword
(出力) INTEGER(2)。プロセッサーの浮動小数点コントロール・ワード。
浮動小数点コントロール・ワードは,浮動小数点数値演算プロセッサーの様々なモードを制御するビット・フラグです。\DF98\INCLUDE サブディレクトリの DFLIB.F90 モジュール・ファイルは,次表のようなコントロール・ワードの定義値を含んでいます。
パラメタ名 | 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 にクリアされていれば有効です。例外は,SETCONTROLFPQQ でフラグを 1 に設定することで無効にすることができます。
例外が無効にされると,それが発生した時の割り込みが発生しません。その代わりとして,浮動小数点プロセスは適切な特別な値 (NaN または符号付き無限大) を生成しますが,プログラムは継続されます。
(もしあれば) GETSTATUSFPQQ を呼び出すことで,例外の発生を検出することができます。浮動小数点例外でのエラーが有効 (SETCONTROLFPQQ でフラグを 0 にクリアすることで) になっている場合,オペレーティング・システムは例外が発生した時に割り込みを生成します。基本設定では,これらの割り込みは実行時エラーを引き起こしますが,SIGNALQQ で割り込みを捕らえ,自分のエラー処理ルーチンに分岐させることができます。
GETCONTROLFPQQ で現在のコントロール・ワードを取り出すことができ,SETCONTROLFPQQ でコントロール・ワードを変更することができます。多くのユーザーは,基本設定を変更する必要はありません。浮動小数点コントロール・ワード,例外,エラー処理に関しての詳細は,「浮動小数点環境」を参照してください。
互換性
CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB
関連情報
GETSTATUSFPQQ,MATHERRQQ,SETCONTROLFPQQ,SIGNALQQ
例
USE DFLIB INTEGER(2) control CALL GETCONTROLFPQQ (control) IF (IAND(control, FPCW$DOWN) .NE. FPCW$DOWN) THEN control = IAND(control, NOT(FPCW$MCW_RC)) ! すべての丸めをクリア control = IOR(control, FPCW$DOWN) ! 丸めに設定 CALL SETCONTROLFPQQ(control) END IF END