检查 --ffast-math 下的 nan

问题描述 投票:0回答:1

假设(同时避免彻夜讨论原因)我使用

-ffast-math
并且我的程序执行十次牛顿迭代。它们要么收敛,要么到那时就会出现 NaN。

这就是我想检查的。现在聊天 GPT 告诉我,基本的数学运算仍然会用表达 NaN 含义的位填充我的数字位(例如 float、double、float128,...),但任何识别该事实的尝试都将失败(我无法让自己理解这怎么可能)。

因此,假设该程序是用

-ffast-math
编译的,并且为了简单起见,假设我的代码中有一个双 x,我试图知道 x 是否为 NaN。我该怎么做呢?对我来说,我似乎可以通过检查 x 是否在限制内来简单地实现 isnan(x) 。

我还检查了这个问题,Chat-GPT 为我提供了 double 的实现,但所有这些位移可能无法独立于平台工作,我不想最终像必须测试 isnan 实现那样完成。

c++ nan fast-math
1个回答
0
投票

使用-ffast-math,计算不允许产生nan,所以答案是

bool isnan(double) {
  return false;
}

当然,是提供标志的人做出了这一保证,如果它不是真的,则可能会出现非常荒谬的结果。

© www.soinside.com 2019 - 2024. All rights reserved.