📜  C++ feclearexcept()(1)

📅  最后修改于: 2023-12-03 15:13:54.081000             🧑  作者: Mango

C++ feclearexcept()

概述

feclearexcept()是C++标准库中的一个函数,其作用是清除当前线程的浮点数异常状态标志位,使之复位为“无异常”。

当浮点运算出现异常时,会将相应的异常状态标志位置位,该函数可以用来清除这些标志位,以便下一次浮点运算时重新判断是否出现了异常。

使用方法

feclearexcept()函数的头文件为<cfenv>

函数原型为:

int feclearexcept(int excepts);

其中excepts参数是一个按位或(|)操作符连接起来的异常状态掩码(FE_DIVBYZEROFE_INVALIDFE_OVERFLOWFE_UNDERFLOWFE_INEXACT),用于指定需要清除的异常状态标志位。

返回值

函数成功执行返回0,否则返回一个非零值。

示例代码
#include <iostream>
#include <cfenv>

#pragma STDC FENV_ACCESS on   //开启浮点数异常处理

int main()
{
    std::feclearexcept(FE_ALL_EXCEPT);  //清除所有异常状态标志位
    double zero = 0.0;
    double result = 1.0 / zero;   //除以0,触发浮点数除以0异常
    if (std::fetestexcept(FE_DIVBYZERO))  //判断是否触发了除以0异常
    {
        std::cout << "Floating point exception occurred: FE_DIVBYZERO" << std::endl;
        std::feclearexcept(FE_DIVBYZERO);  //清除除以0异常标志位
    }
    return 0;
}

上述代码首先通过std::feclearexcept(FE_ALL_EXCEPT)清除了所有异常状态标志位,接着对一个浮点数进行了除以0运算,触发了浮点数除以0异常。在异常发生后,通过std::fetestexcept(FE_DIVBYZERO)判断是否触发了除以0异常,如果是,则输出异常信息“Floating point exception occurred: FE_DIVBYZERO”,并通过std::feclearexcept(FE_DIVBYZERO)清除该异常状态标志位。