gpt4 book ai didi

当运行时计算结果为 NaN 或 inf 时,我可以让 gcc 告诉我吗?

转载 作者:太空狗 更新时间:2023-10-29 16:29:35 26 4
gpt4 key购买 nike

有没有办法告诉 gcc 在运行时抛出 SIGFPE 或类似的东西来响应导致 NaN(-)inf 的计算,就像它一样会被零除吗?

我试过 -fsignaling-nans 标志,但似乎没有帮助。

最佳答案

几乎所有从非 NaN 输入生成 NaN 的浮点运算或数学库函数也应该发出“无效运算”浮点异常信号;类似地,从有限输入产生无穷大的计算通常会发出“被零除”或“溢出”浮点异常的信号。因此,您需要某种方式将这些异常转化为 SIGFPE。

我怀疑答案将高度依赖于系统,因为浮点陷阱和标志的控制很可能由平台 C 库提供,而不是由 gcc 本身提供。但这里有一个在 Linux 上对我有用的例子。它使用 fenv.h 中的 feenableexcept 函数。 _GNU_SOURCE 定义是声明此函数所必需的。

#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;
}

一个警告:我认为在某些设置中,可能直到(理论上)应该导致异常的浮点运算之后的下一个 才会实际生成异常,因此您有时需要空操作浮点运算(例如乘以 1.0)来触发异常。

关于当运行时计算结果为 NaN 或 inf 时,我可以让 gcc 告诉我吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2941611/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com