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.