3.12 例外フラグの処理

feclearexcept()fetestexcept()、および feraiseexcept() 関数では、例外のクリア、テスト、および生成を行うことができます。fegetexceptflag() および fesetexceptflag() 関数では、特定の例外に関する情報の保存と復元を行うことができます。

これらの機能では、--fpmode=ieee_full--fpmode=ieee_fixed など、例外をサポートする浮動小数点モデルを選択する必要があります。
C99 ではこれらの関数を次のように定義します。
void feclearexcept( int excepts);
int fetestexcept( int excepts);
void feraiseexcept( int excepts);
feclearexcept() 関数は、指定された例外のスティッキーフラグをクリアします。fetestexcept() 関数は、指定された例外のスティッキーフラグのビットごと論理和を返します。したがって、オーバーフローフラグが設定されたが、アンダーフローフラグは設定されなかった場合、fetestexcept(FE_OVERFLOW|FE_UNDERFLOW) を呼び出すと FE_OVERFLOW が返されます。
feraiseexcept() 関数は、指定された例外を不特定な順序で生成します。この方法で生成される例外のトラップが有効にされている場合は、この関数が呼び出されます。
C99 では、特定の例外に関するすべての情報の保存と復元を行う関数も定義されています。これには、スティッキーフラグ、例外がトラップされるかどうかの情報、トラップハンドラのアドレスなどが含まれます。これらの関数は以下のとおりです。
void fegetexceptflag(fexcept_t *flagp, int excepts);
void fesetexceptflag( const fexcept_t *flagp, int excepts);
fegetexceptflag() 関数は、指定された例外に関連するすべての情報を、指定された fexcept_t 変数にコピーします。fesetexceptflag() 関数は、指定された例外に関連するすべての情報を、fexcept_t 変数から現在の浮動小数点環境にコピーします。

fesetexceptflag() を使用することで、トラップハンドラを呼び出すことなく、トラップされる例外のスティッキーフラグに 1 を設定できます。一方、feraiseexcept() は、トラップされるすべての例外のトラップハンドラを呼び出します。
関連する参考文書
3.10 ARM 浮動小数点環境を制御するための C99 互換関数
関連情報
--fpmode=model コンパイラオプション
非機密扱いPDF file icon PDF 版ARM DUI0475KJ
Copyright © 2010-2014 ARM.All rights reserved.