FPGETROUND(3) FreeBSD ライブラリ関数マニュアル FPGETROUND(3)
名称
fpgetround, fpsetround, fpsetprec, fpgetprec, fpgetmask, fpsetmask, fpgetsticky, fpresetsticky − IEEE 浮動小数点インタフェース |
書式
#include <ieeefp.h> typedef enum { FP_RN, /* round to nearest */ FP_RM, /* round down to minus infinity */ FP_RP, /* round up to plus infinity */ FP_RZ /* truncate */ } fp_rnd_t; fp_rnd_t fpgetround(void); fp_rnd_t fpsetround(fp_rnd_t direction); typedef enum { FP_PS, /* 24 bit (single-precision) */ FP_PRS, /* reserved */ FP_PD, /* 53 bit (double-precision) */ FP_PE /* 64 bit (extended-precision) */ } fp_prec_t; fp_prec_t fpgetprec(void); fp_prec_t fpsetprec(fp_prec_t precision); #define fp_except_t int #define FP_X_INV 0x01 /* invalid operation */ #define FP_X_DNML 0x02 /* denormal */ #define FP_X_DZ 0x04 /* zero divide */ #define FP_X_OFL 0x08 /* overflow */ #define FP_X_UFL 0x10 /* underflow */ #define FP_X_IMP 0x20 /* (im)precision */ #define FP_X_STK 0x40 /* stack fault */ fp_except_t fpgetmask(void); fp_except_t fpsetmask(fp_except_t mask); fp_except_t fpgetsticky(void); fp_except_t fpresetsticky(fp_except_t sticky); 解説 浮動小数点例外が検出されると、例外スティッキフラグが設定され、例外マスク が検査されます。マスクが設定されている場合はトラップが発生します。この ルーチンでは、浮動小数点例外マスクの設定、および例外が発生した後での例外 スティッキフラグのリセットができます。浮動小数点丸めモードと精度も設定で きます。 fpgetround() 関数は、現在の浮動小数点丸めモードを戻します。 fpsetround() 関数は、浮動小数点丸めモードを設定し、前のモードを戻します。 fpgetprec() 関数は、現在の浮動小数点精度を戻します。 fpsetprec() 関数は、浮動小数点精度を設定し、前の精度を戻します。 fpgetmask() 関数は、現在の浮動小数点例外マスクを戻します。 fpsetmask() 関数は、浮動小数点例外マスクを設定し、前のマスクを戻します。 fpgetsticky() 関数は、現在の浮動小数点スティッキフラグを戻します。 fpresetsticky() 関数は、浮動小数点スティッキフラグをクリアし、前のフラグ を戻します。 以下は、0 除算によるトラップを防ぐコード例です。 fpsetmask(~FP_X_DZ); a = 1.0; b = 0; c = a / b; fpresetsticky(FP_X_DZ); fpsetmask(FP_X_DZ); |
関連項目
警告
浮動小数点例外が発生した後、かつ、マスクを設定する前に、スティッキフラグ をリセットする必要があります。スティッキフラグをリセットする前に別の例外 が発生した場合は、誤った例外タイプが通知されることがあります。 |
歴史
このルーチンは、同じ名前の SysV/386 ルーチンに基づいています。 FreeBSD 10.0 August 23, 1993 FreeBSD 10.0 |