C 库 - feclearexcept() 函数

❮ C 标准库 - <fenv.h>


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.

❮ C 标准库 - <fenv.h>