C 库 - feraiseexcept() 函数
C fenv 库中的 feraiseexcept() 函数用于引发"excepts"参数中指定的浮点异常。该参数是浮点异常宏的按位或组合,例如 FE_DIVBYZERO、FE_INEXACT、FE_INVALID、FE_OVERFLOW 和 FE_UNDERFLOW。
如果 except 引发异常时包含 FE_OVERFLOW 或 FE_UNDERFLOW,则该函数也可能引发 FE_INEXACT。因为异常的引发顺序未指定,但 FE_OVERFLOW 和 FE_UNDERFLOW 总是在 FE_INEXACT 之前引发。
语法
以下是 feraiseexcept() 函数的 C 库语法 -
int feraiseexcept( int excepts );
参数
此函数接受单个参数 -
-
excepts - 它表示要引发的异常标志的位掩码列表。
返回值
如果引发了所有列出的异常,则此函数返回 0,否则返回非零值。
示例 1
以下是用于演示 feraiseexcept() 函数用法的基本 C 程序。
#include <stdio.h> #include <fenv.h> int main() { // 启用除零和溢出异常 if (feraiseexcept(FE_DIVBYZERO | FE_OVERFLOW) != 0) { printf("Failed to raise the specified floating-point exceptions."); return 1; } else { printf("Successfully raised the specified floating-point exceptions."); } return 0; }
输出
以下是输出 -
Successfully raised the specified floating-point exceptions.
示例 2
以下 C 程序使用 feraiseexcept() 函数引发"FE_INEXACT"浮点异常。
#include <stdio.h> #include <fenv.h> int main() { // 引发 FE_INEXACT 浮点异常 if (feraiseexcept(FE_INEXACT) != 0) { printf("Failed to raise the FE_INEXACT floating-point exception."); return 1; } else { printf("Successfully raised the FE_INEXACT floating-point exception."); } return 0; }
输出
以下是输出 -
Successfully raised the FE_INEXACT floating-point exception.
示例 3
以下示例引发了 FE_OVERFLOW 和 FE_UNDERFLOW 浮点异常。此外,它还检查并报告了哪些异常被引发,这表明当包含 FE_OVERFLOW 或 FE_UNDERFLOW 时,也可能引发 FE_INEXACT 异常。
#include <stdio.h> #include <fenv.h> int main() { // 引发 FE_OVERFLOW 和 FE_UNDERFLOW 浮点异常 if (feraiseexcept(FE_OVERFLOW | FE_UNDERFLOW) != 0) { printf("Failed to raise the specified floating-point exceptions."); return 1; } else { printf("Successfully raised the specified floating-point exceptions."); } // 检查当前引发了哪些异常 int raised_excepts = fetestexcept(FE_ALL_EXCEPT); if (raised_excepts & FE_OVERFLOW) { printf("FE_OVERFLOW is raised."); } if (raised_excepts & FE_UNDERFLOW) { printf("FE_UNDERFLOW is raised."); } if (raised_excepts & FE_INEXACT) { printf("FE_INEXACT is also raised."); } return 0; }
输出
以下是输出 -
Successfully raised the specified floating-point exceptions. FE_OVERFLOW is raised. FE_UNDERFLOW is raised.