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 ++文档 |