有没有办法告诉 gcc 抛出 SIGFPE 或类似的东西来响应计算结果NaN
or (-)inf
在运行时,就像被零除一样?
我已经尝试过-fsignaling-nans
标志,这似乎没有帮助。
几乎所有从非 NaN 输入生成 NaN 的浮点运算或数学库函数也应该发出“无效运算”浮点异常信号;类似地,从有限输入产生无穷大的计算通常会发出“被零除”或“溢出”浮点异常的信号。因此,您需要某种方法将这些异常转换为 SIGFPE。
我怀疑答案将高度依赖于系统,因为浮点陷阱和标志的控制可能由平台 C 库而不是 gcc 本身提供。但这里有一个在 Linux 上对我有用的例子。它使用feenableexcept
函数来自fenv.h
. The _GNU_SOURCE
声明此函数需要define。
#define _GNU_SOURCE
#include <fenv.h>
int main(void) {
double x, y, z;
feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW);
x = 1e300;
y = 1e300;
z = x * y; /* should cause an FPE */
return 0;
}
警告:我认为在某些设置中,可能直到以下情况才真正生成异常:next浮点运算在(理论上)应该引起它的浮点运算之后,因此有时需要一个无操作浮点运算(例如乘以 1.0)来触发异常。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)