feraiseexcept
|
定义于头文件
<fenv.h>
|
||
|
int
feraiseexcept
(
int
excepts
)
;
|
(C99 起) | |
尝试触发
excepts
中列出的所有浮点异常(该参数为
浮点异常宏
的按位或运算结果)。若异常包含
FE_OVERFLOW
或
FE_UNDERFLOW
,此函数可能额外触发
FE_INEXACT
。异常触发顺序未作规定,但
FE_OVERFLOW
和
FE_UNDERFLOW
始终会在
FE_INEXACT
之前触发。
目录 |
参数
| excepts | - | 列出要触发的异常标志的位掩码 |
返回值
0 如果所有列出的异常均被触发,否则返回非零值。
示例
#include <stdio.h> #include <fenv.h> #pragma STDC FENV_ACCESS ON void show_fe_exceptions(void) { printf("当前引发的异常:"); 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(" 无"); feclearexcept(FE_ALL_EXCEPT); printf("\n"); } double some_computation(void) { /* 计算达到导致溢出的状态 */ int r = feraiseexcept(FE_OVERFLOW | FE_INEXACT); printf("feraiseexcept() %s\n", (r?"失败":"成功")); return 0.0; } int main(void) { some_computation(); show_fe_exceptions(); return 0; }
输出:
feraiseexcept() 成功 当前引发的异常: FE_INEXACT FE_OVERFLOW
参考文献
- C11 标准 (ISO/IEC 9899:2011):
-
- 7.6.2.3 feraiseexcept 函数 (第 210 页)
- C99 标准 (ISO/IEC 9899:1999):
-
- 7.6.2.3 feraiseexcept 函数 (第 191 页)
参阅
|
(C99)
|
清除指定的浮点状态标志
(函数) |
|
(C99)
|
检测指定的浮点状态标志是否被设置
(函数) |
|
C++ 文档
for
feraiseexcept
|
|