小编Sea*_*ean的帖子

如果任一参数是NaN,会导致C/C++ <,<=和==运算符返回true的原因是什么?

我对IEEE-754浮点比较规则的理解是,!=如果其中一个或两个参数都是NaN,则所有比较运算符将返回false,而!=运算符将返回true.我可以通过简单的独立测试轻松重现此行为:

for (int ii = 0; ii < 4; ++ii)
{
    float a = (ii & 1) != 0 ? NAN : 1.0f;
    float b = (ii & 2) != 0 ? NAN : 2.0f;
    #define TEST(OP) printf("%4.1f %2s %4.1f => %s\n", a, #OP, b, a OP b ? "true" : "false");
    TEST(<)
    TEST(>)
    TEST(<=)
    TEST(>=)
    TEST(==)
    TEST(!=)
}
Run Code Online (Sandbox Code Playgroud)

这将打印预期结果:(NaN的格式-1.$与MSVC运行时一样)

 1.0  <  2.0 => true
 1.0  >  2.0 => false
 1.0 <=  2.0 => …
Run Code Online (Sandbox Code Playgroud)

c c++ nan ieee-754

44
推荐指数
1
解决办法
2046
查看次数

标签 统计

c ×1

c++ ×1

ieee-754 ×1

nan ×1