std:: isnan
|
定义于头文件
<cmath>
|
||
| (1) | ||
|
bool
isnan
(
float
num
)
;
bool
isnan
(
double
num
)
;
|
(C++11 起)
(C++23 前) |
|
|
constexpr
bool
isnan
(
/*浮点类型*/
num
)
;
|
(C++23 起) | |
|
SIMD 重载
(C++26 起)
|
||
|
定义于头文件
<simd>
|
||
|
template
<
/*数学浮点类型*/
V
>
constexpr
typename
/*推导出的 SIMD 类型*/
<
V
>
::
mask_type
|
(S) | (C++26 起) |
|
定义于头文件
<cmath>
|
||
|
template
<
class
Integer
>
bool isnan ( Integer num ) ; |
(A) |
(C++11 起)
(C++23 起为 constexpr) |
|
S)
SIMD 重载对
v_num
执行逐元素的
std::isnan
操作。
|
(since C++26) |
目录 |
参数
| num | - | 浮点数或整数值 |
| v_num | - | 数据并行对象,其特化为 std::basic_simd ,且其元素类型为浮点类型 |
返回值
[
0
,
v_num.
size
(
)
)
内的所有
i
。
注释
存在许多具有不同符号位和有效载荷的不同 NaN 值,请参阅 std::nan 和 std::numeric_limits::quiet_NaN 。
NaN 值永远不会与自身或其他 NaN 值比较相等。根据 IEEE-754 标准,复制 NaN 不要求保留其位表示形式(符号和 有效载荷 ),但大多数实现会保留。
另一种检测浮点值是否为 NaN 的方法是与自身进行比较: bool is_nan ( double x ) { return x ! = x ; } 。
GCC
和
Clang
支持
-ffinite-math
选项(该选项也被
-ffast-math
隐含启用),该选项允许相应编译器假定不存在特殊的 IEEE-754 浮点数值,例如 NaN、无穷大或负零。换言之,在此选项下,
std::isnan
被假定为总是返回
false
。
额外的重载不需要完全按照 (A) 提供。只需确保对于整数类型的实参 num , std :: 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++11)
|
检查给定数值是否正规
(函数) |
|
(C++11)
|
检查两个浮点值是否无序
(函数) |
|
C 文档
用于
isnan
|
|