C
数值 | Numerics

fetestexcept

fetestexcept

在头文件中定义
int fetestexcept(int excepts);(自C99以来)

确定当前设置了哪些浮点异常的指定子集。 参数excepts是浮点异常宏的按位或。

参数

excepts-bitmask listing the exception flags to test

返回值

按位或运算的异常宏都包含在excepts中,并与当前设置的浮点异常相对应。

#include <stdio.h> #include <math.h> #include <fenv.h> #include <float.h> #pragma STDC FENV_ACCESS ON void show_fe_exceptions(void) { printf("current exceptions raised: " if(fetestexcept(FE_DIVBYZERO)) printf(" FE_DIVBYZERO" if(fetestexcept(FE_INEXACT)) printf(" FE_INEXACT" if(fetestexcept(FE_INVALID)) printf(" FE_INVALID" if(fetestexcept(FE_OVERFLOW)) printf(" FE_OVERFLOW" if(fetestexcept(FE_UNDERFLOW)) printf(" FE_UNDERFLOW" if(fetestexcept(FE_ALL_EXCEPT)==0) printf(" none" printf("\n" } int main(void) { /* Show default set of exception flags. */ show_fe_exceptions( /* Perform some computations which raise exceptions. */ printf("1.0/0.0 = %f\n", 1.0/0.0 /* FE_DIVBYZERO */ printf("1.0/10.0 = %f\n", 1.0/10.0 /* FE_INEXACT */ printf("sqrt(-1) = %f\n", sqrt(-1) /* FE_INVALID */ printf("DBL_MAX*2.0 = %f\n", DBL_MAX*2.0 /* FE_INEXACT FE_OVERFLOW */ printf("nextafter(DBL_MIN/pow(2.0,52),0.0) = %.1f\n", nextafter(DBL_MIN/pow(2.0,52),0.0) /* FE_INEXACT FE_UNDERFLOW */ show_fe_exceptions( return 0; }

输出:

current exceptions raised: none 1.0/0.0 = inf 1.0/10.0 = 0.100000 sqrt(-1) = -nan DBL_MAX*2.0 = inf nextafter(DBL_MIN/pow(2.0,52),0.0) = 0.0 current exceptions raised: FE_DIVBYZERO FE_INEXACT FE_INVALID FE_OVERFLOW FE_UNDERFLOW

参考

  • C11标准(ISO / IEC 9899:2011):

扩展内容

feclearexcept(C99)清除指定的浮点状态标志(函数)

| 用于fetestexcept 的C ++文档 |