C++ 参考手册

定义于头文件 <cmath>
bool isnan( float arg );
(1) (C++11 起)
bool isnan( double arg );
(2) (C++11 起)
bool isnan( long double arg );
(3) (C++11 起)
bool isnan( IntegralType arg );
(4) (C++11 起)
1-3) 确定给定的浮点数 arg 是否为非数( NaN )值。
4) 接受任何整数类型 arg 参数的重载集或函数模板。等价于 (2) (将参数转型为 double )。

参数

arg - 浮点值

返回值

arg 为 NaN 则为 true ,否则为 false

注意

有多个拥有不同符号位和载荷的不同 NaN 值,参阅 std::nanstd::numeric_limits::quiet_NaN

NaN 值决不与自身或其他 NaN 值比较相等。 IEEE-754 不要求复制 NaN 保留其位表示(符号与载荷),尽管大多数实现保留。

另一种测试浮点值是否 NaN 的方式是与自身比较: bool is_nan(double x) { return x != x; }

示例

#include <iostream>
#include <cmath>
#include <cfloat>
 
int main()
{
    std::cout << std::boolalpha
              << "isnan(NaN) = " << std::isnan(NAN) << '\n'
              << "isnan(Inf) = " << std::isnan(INFINITY) << '\n'
              << "isnan(0.0) = " << std::isnan(0.0) << '\n'
              << "isnan(DBL_MIN/2.0) = " << std::isnan(DBL_MIN/2.0) << '\n'
              << "isnan(0.0 / 0.0)   = " << std::isnan(0.0/0.0) << '\n'
              << "isnan(Inf - Inf)   = " << std::isnan(INFINITY - INFINITY) << '\n';
}

输出:

isnan(NaN) = true
isnan(Inf) = false
isnan(0.0) = false
isnan(DBL_MIN/2.0) = false
isnan(0.0 / 0.0)   = true
isnan(Inf - Inf)   = true

参阅

(C++11)(C++11)(C++11)
非数(NaN)
(函数)
归类给定的浮点值
(函数)
(C++11)
检查给定数是否拥有有限值
(函数)
(C++11)
检查给定数是否为无限
(函数)
(C++11)
检查给定数是否正规
(函数)
检查两个浮点值是否无顺序
(函数)