📅  最后修改于: 2023-12-03 14:39:37.112000             🧑  作者: Mango
feholdexcept()
函数介绍feholdexcept()
函数是 C 和 C++ 语言标准库提供的函数,其主要功能是保存并清空浮点数环境,以便后续操作不受之前操作对浮点数状态的影响。
C++ 中的函数签名为:
int feholdexcept(fenv_t *envp);
该函数会把当前的浮点状态保存到传入的 fenv_t
类型指针所指向的位置,并清空浮点栈和标志寄存器,返回值为零表示成功。如果传入的指针为 NULL
,则不会保存浮点状态,也不会清空浮点栈和标志寄存器,函数返回值为非零整数。
#include <fenv.h>
#include <iostream>
int main() {
// 声明一个 fenv_t 类型的结构体
fenv_t envp;
// 调用 feholdexcept 函数保存浮点状态及清空浮点栈和标志寄存器
if (feholdexcept(&envp) != 0) {
std::cout << "feholdexcept failed" << std::endl;
return -1;
}
// 进行浮点数运算
float a = 1.0;
float b = 0.0;
float c = a / b;
// 浮点数出现异常后的状态
std::cout << "Floating Point Exception: " << fetestexcept(FE_ALL_EXCEPT) << std::endl;
// 恢复之前的浮点状态
if (fesetenv(&envp) != 0) {
std::cout << "fesetenv failed" << std::endl;
return -1;
}
// 恢复之后的浮点状态
std::cout << "Floating Point Exception After Restored: " << fetestexcept(FE_ALL_EXCEPT) << std::endl;
return 0;
}
上述代码的输出结果为:
Floating Point Exception: 4
Floating Point Exception After Restored: 0
其中,Floating Point Exception:
是在运算中发现的浮点异常,FE_ALL_EXCEPT
表示浮点数出现的所有异常类型,常见的有除以零、溢出、无穷等异常。第二行输出的结果为 0
,表示浮点状态已经被成功恢复,并且之前的异常已经被清除。
fesetenv()
函数之前调用;