feclearexcept(3M)

名前
feclearexcept, feraiseexcept, fetestexcept, fegetexceptflag, fesetexceptflag - 浮動小数点例外フラグへのアクセス

形式

cc [ flag ... ] file ... -R/opt/SUNWspro/lib -L/opt/SUNWspro/lib -lm9x [ library ... ]

#include <fenv.h>

void feclearexcept(int excepts);

void feraiseexcept(int excepts);

int fetestexcept(int excepts);

void fegetexceptflag(fexcept_t *flagp, int excepts);

void fesetexceptflag(const fexcept_t *flagp, int excepts);

void fesetexceptflag96(const fexcept_t *flagp, int excepts);

機能説明

これらの関数は、浮動小数点例外フラグにアクセスします。これらの関数において、 excepts 引数は、次の値 (<fenv.h> に定義されている) の任意のビット 単位の論理和により、1 つまたは複数の例外を指定します。

    FE_INEXACT
    FE_UNDERFLOW
    FE_OVERFLOW
    FE_DIVBYZERO
    FE_INVALID

便宜上、上記すべての値のビット単位の論理和を示すために、マクロ FE_ALL_EXCEPT が定義されています。

feclearexcept(excepts) は、指定した例外のフラグをクリアします。

feraiseexcept(excepts) は、指定した例外を発生します。つまり、指定した すべての例外に対して、FEX_NONSTOP 処理モードが有効である場合は、例外のフ ラグを設定します。そうでない場合は、fex_set_handling(3M) で記述されている ように適切なアクションを行います。

fetestexcept(excepts) は、上記値のうち、フラグが設定されていて、 指定した例外のサブセットに対応するもののビット単位の論理和を戻します。

fegetexceptflag(flagp, excepts) は、excepts で示した例外 のフラグの現在値を、flagp が指すオブジェクトに保存します。型 fexcept_t は <fenv.h> で定義されています。

fesetexceptflag(flagp, excepts) は、excepts で示した例外 のフラグの値を、flagp が指すオブジェクトから復元します。このオブジェクトは 、fegetexceptflag() への以前の呼び出しで設定されていなければなりません。 そうでない場合は、示したフラグの影響は定義されません。fesetexceptflag 関数 は、例外を発生させるのではなく、フラグの状態を設定するだけです。

使用例
次のコードの一部は、無効な演算フラグが設定されている場合は関数 f() を呼 び出し、オーバーフローフラグが設定されている場合は g() を呼び出します。

    #include <fenv.h>
    /*...*/
    {
    	int set_excepts;
    	feclearexcept(FE_INVALID | FE_OVERFLOW);
    	/* 例外を発生する可能性のある計算 */
    	set_excepts = fetestexcept(FE_INVALID | FE_OVERFLOW);
    	if (set_excepts & FE_INVALID) f();
    	if (set_excepts & FE_OVERFLOW) g();
    	/*...*/
    }

属性
次の属性については、 attributes(5) を参照してください。

属性タイプ | 属性値
使用条件 | SPROm9xs
インタフェース安定性 | 標準
MT レベル | MT-安全

関連項目
fegetenv(3M), fex_set_handling(3M), fex_set_log(3M), attributes(5)

『数値計算ガイド』

注意事項
例外に対して FEX_CUSTOM 処理モードが有効であるとき、feraiseexcept 経由でその例外を発生すると、処理関数が呼び出されます。処理関数は例外フラグを変更し、fex_set_handling(3M) に記述されているように設定します。ハンドラが戻す値はすべて無視されます。

「形式」で示しているように、cc で libm9x とリンクするためには、コマンド行で次のように指定することを推奨します。

    -Rinstall-path/lib -Linstall-path/lib -lm9x

install-path には、コンパイラがインストールされている場所を指定します (デフォルトでは、/opt/SUNWspro)。libm9x とリンクする方法についての詳細は、 『数値計算ガイド』を参照してください。