与自身的双重比较

Vol*_*maz 0 c++

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

double level = 0;

...

if (!(level == level) && !(level < level) && !(level > level))
    exit(0);
Run Code Online (Sandbox Code Playgroud)

我认为这是关于双重比较的主题.知道它是什么?

Bat*_*eba 5

对于非数字(NaN)而言,这是一个相当过度设计的测试.

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

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

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

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