実行時サブルーチン:プロセッサーの浮動小数点コントロール・ワードの値を設定します。このルーチンは,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
関連情報
GETCONTROLFPQQ,GETSTATUSFPQQ,LCWRQQ,SCWRQQ
例
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