命名空间
变体
操作

std::isnan

来自 cppreference.com
< cpp‎ | numeric‎ | math
 
 
 
常用数学函数
函数
基本操作
(C++11)  
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
指数函数
(C++11)
(C++11)

(C++11)
(C++11)
幂函数
(C++11)
(C++11)
三角函数
双曲函数
(C++11)
(C++11)
(C++11)

误差和伽马函数
(C++11)
(C++11)
(C++11)
(C++11)
最接近整数的浮点运算
(C++11)(C++11)(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
浮点操作函数
(C++11)(C++11)
(C++11)
(C++11)
(C++11)(C++11)
(C++11)
分类和比较
(C++11)
(C++11)
(C++11)
isnan
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
类型
(C++11)
(C++11)
(C++11)
宏常量
分类
(C++11)(C++11)(C++11)(C++11)(C++11)


 
定义在头文件 <cmath>
(1)
bool isnan( float num );

bool isnan( double num );

bool isnan( long double num );
(自 C++11 起)
(直至 C++23)
constexpr bool isnan( /* 浮点类型 */ num );
(自 C++23 起)
定义在头文件 <cmath>
template< class Integer >
bool isnan( Integer num );
(A) (自 C++11 起)
(自 C++23 起为 constexpr)
1) 确定给定的浮点数 num 是否为非数字 (NaN) 值。 库为所有 cv 无限定浮点类型提供了重载,作为参数 num 的类型。(自 C++23 起)
A) 为所有整数类型提供附加重载,这些类型被视为 double.

内容

[编辑] 参数

num - 浮点或整数值

[编辑] 返回值

如果 num 为 NaN,则返回 true,否则返回 false.

[编辑] 备注

存在许多不同的 NaN 值,具有不同的符号位和有效载荷,请参见 std::nanstd::numeric_limits::quiet_NaN.

NaN 值从不与其自身或其他 NaN 值相等。根据 IEEE-754,复制 NaN 不需要保留其位表示(符号和 有效载荷),但大多数实现确实如此。

测试浮点值是否为 NaN 的另一种方法是将其与自身进行比较:bool is_nan(double x) { return x != x; }.

GCCClang 支持 -ffinite-math 选项(此外由 -ffast-math 隐式包含),这允许各自的编译器假设不存在特殊 IEEE-754 浮点值,例如 NaN、无穷大或负零。换句话说,在此选项下,假定 std::isnan 始终返回 false.

附加重载不需要完全按照 (A) 提供。它们只需要足够确保对于其整数类型的参数 numstd::isnan(num) 的效果与 std::isnan(static_cast<double>(num)) 相同。

[编辑] 示例

#include <cfloat>
#include <cmath>
#include <iostream>
 
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)
检查给定的数字是否为正常数
(函数) [编辑]
检查两个浮点值是否无序
(函数) [编辑]
C 文档 for isnan