📅  最后修改于: 2023-12-03 14:59:44.843000             🧑  作者: Mango
fesetexceptflag()
函数用于设置浮点数异常标志位,例如浮点溢出、除以零等。该函数的定义在头文件<cfenv>
中。
int fesetexceptflag(const fexcept_t* flagp, int excepts);
参数说明:
flagp
:指向一个fexcept_t类型的指针,用于存储标志位。excepts
:用于指定需要设置的异常标志位。返回值:
下面是一个简单的例子,用于演示fesetexceptflag()
函数的用法。
#include <iostream>
#include <cfenv>
#pragma STDC FENV_ACCESS ON
int main() {
// 存储当前的异常标志位
fexcept_t flag;
fegetexceptflag(&flag, FE_ALL_EXCEPT);
// 设置异常标志位
fesetexceptflag(&flag, FE_OVERFLOW);
double a = 1.0e1000;
double b = 1.0e10;
volatile double c = a * b;
std::cout << "c = " << c << std::endl;
if (fetestexcept(FE_OVERFLOW)) {
std::cout << "FE_OVERFLOW caught" << std::endl;
}
return 0;
}
这个例子设置了浮点数溢出的标志位,然后计算一个特别大的数,对其与一个正常的数相乘,使其溢出。然后通过fetestexcept()
函数检查是否捕捉到了溢出异常,如果捕捉到了,则输出一条信息。
需要注意的是,使用浮点数异常处理功能前,需要通过#pragma STDC FENV_ACCESS ON
开启对浮点数环境的访问。这里的fegetexceptflag()
函数用于获取当前的异常标志位。