Namespaces
Variants

feraiseexcept

From cppreference.net
< c ‎ | numeric ‎ | fenv
定义于头文件 <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 页)

参阅

清除指定的浮点状态标志
(函数)
检测指定的浮点状态标志是否被设置
(函数)
C++ 文档 for feraiseexcept