📜  C++ fesetexceptflag()(1)

📅  最后修改于: 2023-12-03 14:59:44.843000             🧑  作者: Mango

C++ fesetexceptflag()

简介

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()函数用于获取当前的异常标志位。