📅  最后修改于: 2023-12-03 15:25:29.435000             🧑  作者: Mango
在C++中,feclearexcept函数用于清除浮点异常的状态标志,在以后的计算中将不会影响到。该函数需要使用
#include <cfenv>
int feclearexcept(int exceptions);
exceptions
:需要清除的浮点异常,可以为以下常量中的一个或多个的按位或操作结果:函数执行成功则返回零,否则返回非零值。
#include <iostream>
#include <cfenv>
#pragma STDC FENV_ACCESS on
using namespace std;
int main() {
// 示例代码:打印除以零异常
double a = 10, b = 0, res;
int excepts = fegetexceptflag(nullptr, FE_ALL_EXCEPT);
feclearexcept(FE_ALL_EXCEPT);
res = a / b;
excepts = fetestexcept(FE_ALL_EXCEPT);
if (excepts & FE_DIVBYZERO)
cout << "Divide by zero exception." << endl;
else
cout << "Result: " << res;
return 0;
}
输出:
Divide by zero exception.
此代码演示了如何使用feclearexcept函数清除浮点异常标志。在此示例中,我们想要除以零时抛出FE_DIVBYZERO异常,但在调用除法运算符之前,我们先使用feclearexcept清除了浮点异常标志。因此,在我们执行除法之前,标志已经被清除,即使除数为0,它也不会抛出异常。但是,这里我们调用fetestexcept来检查是否有除以零的异常。
在上面的代码之前,我们使用了(#pragma STDC FENV_ACCESS on
)来开启 IEEE 754 浮点状态改变的保护。它允许程序员改变浮点状态并向标志(flag)写入值,如果没有该条语句,则结果是未定义的。