为什么std :: isnan()对于具有NAN值的双变量返回false

Max*_*sov 4 c++ qt

我决定使用NAN(也尝试过std::numeric_limits::quiet_NaN())作为该函数参数的默认值,但是当我尝试使用进行检查时std::isnan,它返回了false。在同一时间使用qDebug()和我将值打印到控制台nan

我也尝试检查NAN使用x != x规则。它工作了NAN != NAN,但是得到falsex != x

最后一次尝试是NAN在函数内部定义double变量,然后尝试使用这两种方法进行检查,但结果相同。

我不明白哪里出了问题。

例:

double abc = NAN;
qDebug()<< abc << (abc != abc) << std::isnan(abc);
Run Code Online (Sandbox Code Playgroud)

输出:

nan false false
Run Code Online (Sandbox Code Playgroud)

Max*_*sov 5

我不知道我们正在-ffast-math项目中使用它。这就是导致问题的原因。感谢您的关注和评论。如果使用,则没有解决方案-ffast-math。您只需要寻找另一种解决问题的方法(无需NAN