ia32 システムの FPU (浮動小数点演算ユニット) は,システムが数値計算のために,ステイタスおよびコントロール・ワードとして,そしてエラー・ポインタとして使用する 8 個の浮動小数点レジスタを含んでいます。通常,プログラマが配慮する必要があるのはステイタスおよびコントロール・ワードだけで,それも浮動小数点環境をカスタマイズするときに限られます。
FPU のステイタスおよびコントロール・ワードは,FPU の状態の値を保持する,またはその動作を制御するビットを含んでいる 16 ビットのレジスタに対応しています。Visual Fortran は,ステイタスおよびコントロール・ワードの適切なビットを設定し,リセットするためのシンボル定数の組を定義しています。次に例を示します。
USE DFLIB CALL SETCONTROLFPQQ(FPCW$OVERFLOW .AND. FPCW$CHOP) ! オーバーフローを許可し,切り捨てで丸めるために ! 浮動小数点コントロール・ワードに設定します。
ステイタスおよびコントロール・シンボル定数 (上の例の FPCW$OVERFLOW や FPCW$CHOP など) は,...\DF98\INCLUDE フォルダの DFLIB.F90 モジュールに INTEGER(2) パラメタとして定義されています。ステイタスおよびコントロール・ワードは,異なる FPU オプションのための異なるパラメタの論理的な結合 (.AND. など) から構成されています。
シンボル定数名は,name$option という一般形式を持っています。次表に接頭辞名を示します。
パラメタ・フラグの接頭辞
名前 | 意味 |
FPSW | 浮動小数点ステイタス・ワード |
FPCW | 浮動小数点コントロール・ワード |
SIG | シグナル |
FPE | 浮動小数点例外 |
MTH | 数学関数 |
接尾辞 option は,その名前に対して用意されているいずれかのオプションです。パラメタ name$option は,ステイタスまたはコントロール・オプションに対応しているか (たとえば FPSW$ZERODIVIDE は,ゼロによる除算の例外が起きたかどうかを示すステイタス・ワード・パラメタです),name の全オプションのシンボル定数を 1 に設定するマスクに対応しています。マスクは論理関数 (IAND,IOR,および NOT など) で使用することができ,指定された名前のすべてのオプションを設定またはクリアするために使用することができます。この後の節では,option の定義を示し,例とともにその使用方法を示しています。
浮動小数点プロセッサー・オプションを制御し (ia32 システム),実行時ライブラリー・ルーチンの GETSTATUSFPQQ (ia32 のみ),GETCONTROLFPQQ (ia32 のみ),SETCONTROLFPQQ (ia32 のみ),および MATHERRQQ (ia32 のみ) でそのステイタスを調べることができます。これらのルーチンの使用例も,この後の節で示しています。
関連情報