如何在C++中比较两个NAN值

Cod*_*der 11 c++ compare nan

我有一个应用程序,其中代码区域生成NAN值.我必须比较相等的值,并基于执行其余代码.如何比较C++中的两个NAN值是否相等?

Jos*_*eld 22

假设IEEE 754浮点表示,您无法比较两个NaN值的相等性.NaN不等于任何值,包括它自身.但是,您可以std::isnan通过<cmath>标题测试它们是否都是NaN :

if (std::isnan(x) && std::isnan(y)) {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

但是,这仅适用于C++ 11.在C++ 11之前,Boost Math Toolkit提供了一些浮点分类器.或者,您可以通过将值与自身进行比较来检查值是否为NaN:

if (x != x && y != y) {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

因为NaN是唯一不等于自身的值.在过去,某些编译器搞砸了,但我现在还不确定它的状态(它似乎与GCC一起正常工作).

MSVC提供_isnan功能.

最后的选择是假设您知道表示是IEEE 754并进行一些检查.显然这不是最便携的选择.