Oracle® Solaris Studio 12.4: 数値計算ガイド

印刷ビューの終了

更新: 2015 年 1 月
 
 

4.3 例外の検出

IEEE 規格の要求に従い、SPARC ベースのシステムおよび x86 ベースのシステムの浮動小数点環境では、浮動小数点例外の発生を記録するステータスフラグが提供されています。プログラムでこれらのフラグをテストすると、発生した例外を判別できます。これらのフラグは、明示的に設定およびクリアすることもできます。ieee_flags 関数は、これらのフラグにアクセスする方法の 1 つです。C または C++ で記述されるプログラムでは、C99 浮動小数点環境関数によって別の方法が提供されています。

SPARC ベースのシステムでは、各例外には 「現在」と 「累積」の 2 つのフラグが関連付けられています。現在の例外フラグは、最後の浮動小数点命令の実行が完了したことによって発生した例外を常に示しています。これらのフラグは累積例外フラグにも累積され (つまり、論理和が生成されます)、それにより、プログラムの実行が開始されてから、またはプログラムによって累積フラグが最後にクリアされてから発生し、まだトラップされていないすべての例外が記録されます。浮動小数点命令がトラップされた例外の原因である場合、そのトラップを発生させた例外に対応する現在の例外フラグが設定されますが、累積フラグは変更されません。現在の例外フラグと累積例外フラグは、浮動小数点ステータスレジスタ %fsr 内に保持されます。

x86 ベースのシステムでは、浮動小数点ステータスワード (SW) が累積例外のフラグ、および浮動小数点スタックのステータスのフラグを提供します。SSE2 命令をサポートする x86 ベースのシステムでは、それらの命令によって発生した累積例外を記録するフラグが MXCSR レジスタに含まれています。