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.

