マニュアルページ fegetexceptflag.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), attri-
butes(5)
『数値計算ガイド』
注意事項
例外に対して FEX_CUSTOM 処理モード が 有 効 で あ る と き、
feraiseexcept 経由でその例外を発生すると、処理関数が呼び出さ
れます。処理関数は例外フラグを変更 し、 fex_set_handling(3M)
に記述されているように設定します。ハンドラが戻す値はすべて無
視されます。
「形式」で示しているように、cc で libm9x とリンクするため に
は、コマンド行で次のように指定することを推奨します。
-Rinstall-path/lib -Linstall-path/lib -lm9x
install-path には、コンパイラがインストールされている場所 を
指 定します (デフォルトでは、/opt/SUNWspro)。libm9x とリンク
する方法についての詳細は、『数値計算ガイド』を参照してくださ
い。