与自身的双重比较

时间:2016-01-19 14:37:28

标签: c++

我有一个我正在分析的代码片段,但我不明白这一点:

double level = 0;

...

if (!(level == level) && !(level < level) && !(level > level))
    exit(0);

我认为这是双重比较主题。知道它是什么?

1 个答案:

答案 0 :(得分:5)

对于而不是数字(NaN)来说,这是一个相当过度设计的测试。

NaN是一个特殊的浮点值。 (并非所有浮点类型都有它,但最常见的是 - IEEE754 - 确实如此。)

它被定义为比较不等于所有其他数字,包括它自己。

它也定义为不大于或不小于任何其他数字,包括其本身。 (虽然后续的测试是多余的)。

从C ++ 11开始,您可以使用std::isnan(level)代替。在此之前,我最喜欢的测试方法是使用相当简单的表达式level != level