C 库 - fetestexcept() 函数

❮ C 标准库 - <fenv.h>


C fenv 库中的 fetestexcept() 函数用于检查当前通过"excepts"参数设置了哪些指定的浮点异常。

excepts 参数是异常宏的按位或组合,例如 FE_DIVBYZERO、FE_INEXACT、FE_INVALID、FE_OVERFLOW、FE_UNDERFLOW 和 FE_ALL_EXCEPT

语法

以下是 fetestexcept() 函数的 C 库语法 -

int fetestexcept( int excepts );

参数

此函数接受单个参数 -

  • excepts - 它表示要测试的异常标志的位掩码列表。

返回值

此函数返回一个整数值,该值是 excepts 参数指定的当前设置的异常标志对应的浮点异常宏的按位或值。

示例 1

以下是演示 fetestexcept() 函数用法的基本 C 程序。

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

int main() {
    // 首先清除所有异常
    feclearexcept(FE_ALL_EXCEPT);
    
    // 除以零异常
    double result = 1.0 / 0.0;
    
    // 测试设置了哪些异常标志
    int flags = fetestexcept(FE_DIVBYZERO);
   
   if (flags & FE_DIVBYZERO) {
      printf("Divide by zero exception is set.");
   }
   else{
      printf("No exception is set. ");
   }   
   return 0;
}

输出

以下是输出 -

Divide by zero exception is set.

示例 2

以下程序使用 fetestexcept() 函数检查我们遇到的浮点异常类型。

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

int main() {
    // 首先清除所有异常
    feclearexcept(FE_ALL_EXCEPT);
    
    double result = sqrt(-1.0);
    
    // 测试设置了哪些异常标志
    int flags = fetestexcept(FE_ALL_EXCEPT);

   if (flags & FE_DIVBYZERO) {
      printf("Divide by zero exception is set.");
   }
   if (flags & FE_INEXACT) {
      printf("Inexact result exception is set.");
   }
   if (flags & FE_INVALID) {
      printf("Invalid operation exception is set.");
   }
   if (flags & FE_OVERFLOW) {
      printf("Overflow exception is set.");
   }
   if (flags & FE_UNDERFLOW) {
      printf("Underflow exception is set.");
   }
   return 0;
}

输出

以下是输出 -

Invalid operation exception is set.

示例 3

以下示例检查大值相乘后是否发生溢出异常。

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

int main() {
    // 首先清除所有异常标志
    feclearexcept(FE_ALL_EXCEPT);
    
    // 通过乘以较大的值来产生溢出异常
    double overflow_result = 1.0e300 * 1.0e300;
    
    // 测试哪些异常标志
    int flags = fetestexcept(FE_OVERFLOW);
    if (flags & FE_OVERFLOW) {
      printf("Overflow exception is set.");
    }
    else {
      printf("No exception is set.");
    }
    return 0;
}

输出

以下是输出 -

Overflow exception is set.

❮ C 标准库 - <fenv.h>