C 库 - feclearexcept() 函数



C 的fenvfeclearexcept()函数用于清除由位掩码参数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

以下是用C编写的基本程序,用于演示feclearexcept()函数的使用。

#include <stdio.h>
#include <math.h>
#include <fenv.h>

int main() {
   // Clear all floating-point exceptions.
   feclearexcept(FE_ALL_EXCEPT);
   
   // floating-point operation.
   double result = sqrt(-1.0);
   printf("%lf \n", result);
   
   // If floating-point exceptions were raised.
   if (fetestexcept(FE_INVALID)) {
     // Handle the invalid operation exception.
     printf("Invalid floating-point operation occurred.\n");
   }
   else {
       printf("No Invalid floating-point operation occurred. \n");
   }
   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() {
   // Clear all floating-point exceptions.
   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() {
   // Clear following floating-point exceptions.
   feclearexcept(FE_DIVBYZERO | FE_OVERFLOW);

   //divide-by-zero exception.
   double result = 1.0 / 0.0;

   // Check if the divide-by-zero exception was raised.
   if (fetestexcept(FE_DIVBYZERO)) {
      printf("Divide-by-zero exception.\n");
   } else {
      printf("No divide-by-zero exception.\n");
   }

   // Check if the overflow exception was raised.
   if (fetestexcept(FE_OVERFLOW)) {
      printf("Overflow exception.\n");
   } else {
      printf("No overflow exception.\n");
   }

   return 0;
}

输出

以下是输出:

Divide-by-zero exception.
No overflow exception.
c_library_fenv_h.htm
广告