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

马克西姆·斯科沃佐夫

我决定使用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);

输出:

nan false false
马克西姆·斯科沃佐夫

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么std :: max返回错误的值?

对于IEEE754 NaN值,所有比较返回false的理由是什么?

为什么std :: visit必须具有单个返回类型?

为什么std :: strong_ordering具有“等效”值?

为什么选择std :: optional :: value()&&; 返回&&?

为什么返回std :: vector仍在复制?

为什么std :: get无法使用变量?

为什么没有std :: size?

为什么std ::没有比“ <”更好?

为什么没有std :: on_exit?

为什么没有std :: erase?

为什么会有`std :: llabs`?

为什么std :: cbegin返回与std :: begin相同的类型

为什么没有std :: to_string的std :: string重载

为什么std :: valarray没有std :: data()重载?

为什么对于简单函数和lambda,std :: is_function返回false?

为什么std :: is_assignable对于相关的指针类型返回false?

角度-为什么Number.isNaN对于非空字符串返回false?

为什么具有%z格式的std :: put_time(std :: gmtime)会为UTC返回+0100?

为什么std :: queue :: pop不返回值?

为什么std :: binary_search返回布尔值?

为什么std :: fetch_add返回旧值?

为什么std :: move具有向前引用?

为什么std :: list具有最大大小?

为什么std :: map具有find成员函数?

为什么std :: unordered_map具有保留方法?

为什么std :: ratio没有值成员?

为什么std :: forward_list ::: remove和std :: erase <std :: forward_list>具有不同的值类型?

为什么std :: string.find()对于“ <”不起作用?