检查double(或float)是否为C ++中的NaN
有一个isnan()函数吗? PS .:我在 MinGW (如果有帮助)。 我使用 <math.h> isnan()解决了这个问题,该问题在 <cmath> 中不存在,而我最初是 #include 。 #1楼 不依赖于所用NaN的特定IEEE表示的可能解决方案如下: template<class T> bool isnan( T f ) { T _nan = (T)0.0/(T)0.0; return 0 == memcmp( (void*)&f, (void*)&_nan, sizeof(T) ); } #2楼 对我来说,解决方案可以是一个宏,使其显式内联,从而足够快。 它也适用于任何浮点类型。 它基于这样一个事实:当值不等于自身时,唯一的情况就是当值不是数字时。 #ifndef isnan #define isnan(a) (a != a) #endif #3楼 第一个解决方案:如果您使用的是C ++ 11 自从有人问到这个问题以来,就有了一些新的发展:重要的是要知道 std::isnan() 是C ++ 11的一部分 概要 定义于头文件 <cmath> bool isnan( float arg ); (since C++11) bool isnan( double arg ); (since C++11) bool isnan( long double arg );