C 库 - feclearexcept() 函数
C fenv 库中的 feclearexcept() 函数用于清除由 bitmask 参数 excepts 指定的浮点环境中的浮点异常。如果 except 等于 '0',则返回 0。
位掩码参数 excepts 是浮点异常宏的按位或组合,例如 FE_DIVBYZERO、FE_INEXACT、FE_INVALID、FE_OVERFLOW、FE_UNDERFLOW 和 FE_ALL_EXCEPT。
语法
以下是 feclearexcept() 函数的 C 库语法 -
int feclearexcept(int excepts);
参数
此函数接受单个参数 -
-
excepts - 它表示要清除的异常标志的位掩码列表。
返回值
如果所有异常均已清除,则此函数返回"0"。否则,如果发生错误,则返回非零值。
示例 1
以下是用于演示 feclearexcept() 函数用法的基本 C 程序。
#include <stdio.h>
#include <math.h>
#include <fenv.h>
int main() {
// 清除所有浮点异常。
feclearexcept(FE_ALL_EXCEPT);
// 浮点运算。
double result = sqrt(-1.0);
printf("%lf ", result);
// 如果引发了浮点异常。
if (fetestexcept(FE_INVALID)) {
// 处理无效运算异常。
printf("Invalid floating-point operation occurred.");
}
else {
printf("No Invalid floating-point operation occurred. ");
}
return 0;
}
输出
如果浮点数无效,我们将得到以下输出 -
-nan Invalid floating-point operation occurred.
示例 2
传递 excepts 值 0
在以下示例中,如果我们传递 except 值 0,则 feclearexcept() 函数将返回 0。
#include <stdio.h>
#include <math.h>
#include <fenv.h>
int main() {
// 清除所有浮点异常。
feclearexcept(FE_ALL_EXCEPT);
int excepts = 0;
int res = feclearexcept(excepts);
printf("%d", res);
}
输出
以下是输出 -
0
示例 3
以下程序执行浮点除法运算,如果尝试除以 0,则会引发除以零异常。
#include <stdio.h>
#include <fenv.h>
int main() {
// 清除以下浮点异常。
feclearexcept(FE_DIVBYZERO | FE_OVERFLOW);
//除以零异常。
double result = 1.0 / 0.0;
// 检查是否引发了除以零异常。
if (fetestexcept(FE_DIVBYZERO)) {
printf("Divide-by-zero exception.");
} else {
printf("No divide-by-zero exception.");
}
// 检查是否引发溢出异常。
if (fetestexcept(FE_OVERFLOW)) {
printf("Overflow exception.");
} else {
printf("No overflow exception.");
}
return 0;
}
输出
以下是输出 -
Divide-by-zero exception. No overflow exception.

