fenv(3) Library Functions Manual fenv(3) feclearexcept, fegetexceptflag, feraiseexcept, fesetexceptflag, fetestexcept, fegetenv, fegetround, feholdexcept, fesetround, fesetenv, feupdateenv, feenableexcept, fedisableexcept, fegetexcept - LIBRARY Math library (libm, -lm) #include int feclearexcept(int excepts); int fegetexceptflag(fexcept_t *flagp, int excepts); int feraiseexcept(int excepts); int fesetexceptflag(const fexcept_t *flagp, int excepts); int fetestexcept(int excepts); int fegetround(void); int fesetround(int rounding_mode); int fegetenv(fenv_t *envp); int feholdexcept(fenv_t *envp); int fesetenv(const fenv_t *envp); int feupdateenv(const fenv_t *envp); C99, (, . .) . -- (divide-by-zero) , . (overflow) , , () . (underflow) , , ( , ). inexact , . . invalid , (no well-defined result), , 0/0 - sqrt(-1). : (/ ) , ( ), , (, , ). , : FE_DIVBYZERO, FE_INEXACT, FE_INVALID, FE_OVERFLOW, FE_UNDERFLOW. (), , FE_OVERFLOW|FE_UNDERFLOW, . . FE_ALL_EXCEPT -- OR , . feclearexcept() , . fegetexceptflag() , excepts *flagp. feraiseexcept() , excepts. fesetexceptflag() , excepts, *flagp. fegetexceptflag() , excepts. fetestexcept() , excepts . , (significand). : ( ), (round up, ), (round down, ) . , : FE_TONEAREST, FE_UPWARD, FE_DOWNWARD FE_TOWARDZERO. fegetround() , . fesetround() . C99 POSIX.1-2008 FLT_ROUNDS, . : -1 . 0 . 1 . 2 . 3 . , . FLT_ROUNDS , fesetround() ( ). , , fenv_t. FE_DFL_ENV ( const fenv_t *). ISO C; , ( ). fegetenv() *envp. feholdexcept() , ( ), . . fesetenv() *envp. , , fegetenv() feholdexcept() FE_DFL_ENV. . feupdateenv() , *envp, , . , *envp. , *envp . . attributes(7). +----------------------------+----------------------------------------------------------+--------------------------+ | | | | +----------------------------+----------------------------------------------------------+--------------------------+ |feclearexcept(), | | MT-Safe | |fegetexceptflag(), | | | |feraiseexcept(), | | | |fesetexceptflag(), | | | |fetestexcept(), | | | |fegetround(), fesetround(), | | | |fegetenv(), feholdexcept(), | | | |fesetenv(), feupdateenv(), | | | |feenableexcept(), | | | |fedisableexcept(), | | | |fegetexcept() | | | +----------------------------+----------------------------------------------------------+--------------------------+ C11, POSIX.1-2008, IEC 60559 (IEC 559:1989), ANSI/IEEE 854. C99, POSIX.1-2001. glibc 2.1. glibc If possible, the GNU C Library defines a macro FE_NOMASK_ENV which represents an environment where every exception raised causes a trap to occur. You can test for this macro using #ifdef. It is defined only if _GNU_SOURCE is defined. The C99 standard does not define a way to set individual bits in the floating-point mask, for example, to trap on specific flags. Since glibc 2.2, glibc supports the functions feenableexcept() and fedisableexcept() to set individual floating-point traps, and fegetexcept() to query the state. #define _GNU_SOURCE /* feature_test_macros(7) */ #include int feenableexcept(int excepts); int fedisableexcept(int excepts); int fegetexcept(void); feenableexcept() fedisableexcept() () , excepts, , -1 . fegetexcept() . C99 , FLT_ROUNDS , fesetround(). : FLT_ROUNDS 1. . math_error(7) Azamat Hackimov , Dmitry Bolkhovskikh , Yuri Kozlov ; GNU 3 , . . , , . Linux man-pages 6.06 31 2023 . fenv(3)