📅  最后修改于: 2023-12-03 15:13:54.081000             🧑  作者: Mango
feclearexcept()
是C++标准库中的一个函数,其作用是清除当前线程的浮点数异常状态标志位,使之复位为“无异常”。
当浮点运算出现异常时,会将相应的异常状态标志位置位,该函数可以用来清除这些标志位,以便下一次浮点运算时重新判断是否出现了异常。
feclearexcept()
函数的头文件为<cfenv>
。
函数原型为:
int feclearexcept(int excepts);
其中excepts
参数是一个按位或(|
)操作符连接起来的异常状态掩码(FE_DIVBYZERO
、FE_INVALID
、FE_OVERFLOW
、FE_UNDERFLOW
、FE_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)
清除该异常状态标志位。