isnan

来自cppreference.com
< c‎ | numeric‎ | math
 
 
 
常用数学函数
函数
基本运算
remainder(C99)
remquo(C99)
fma(C99)
fmax(C99)
fmin(C99)
fdim(C99)
nan
nanf
nanl
(C99)
(C99)
(C99)
指数函数
exp
exp2(C99)
expm1(C99)
log
log10
log1p(C99)
log2(C99)
幂函数
sqrt
cbrt(C99)
hypot(C99)
pow
三角及双曲函数
sinh
cosh
tanh
asinh(C99)
acosh(C99)
atanh(C99)
误差及伽马函数
erf(C99)
erfc(C99)
lgamma(C99)
tgamma(C99)
临近整数的浮点运算
ceil
floor
round
lround
llround
(C99)
(C99)
(C99)
trunc(C99)
nearbyint(C99)
rint
lrint
llrint
(C99)
(C99)
(C99)
浮点数操作函数
ldexp
scalbn
scalbln
(C99)
(C99)
ilogb(C99)
logb(C99)
分类
fpclassify(C99)
isfinite(C99)
isinf(C99)
isnan(C99)
isnormal(C99)
signbit(C99)
宏常量
 
定义于头文件 <math.h>
#define isnan(arg) /* implementation defined */
(C99 起)

确定给定的浮点数arg是否非数(NaN)值。此宏返回整数值。

FLT_EVAL_METHOD被忽略:即使参数被以多于其类型的范围和精度的方式求值,它还是首先被转换回其语义类型,然后分类基于该类型。

目录

[编辑] 参数

arg - 浮点值

[编辑] 返回值

arg是NaN则为非零整数值,否则为0

[编辑] 注意

有许多带有各异符号位和载荷的不同NaN值,见nan

NaN决不与其自身或其他NaN值比较相等。复制NaN可能改变其位模式。

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

[编辑] 示例

#include <stdio.h>
#include <math.h>
#include <float.h>
 
int main(void)
{
    printf("isnan(NAN)         = %d\n", isnan(NAN));
    printf("isnan(INFINITY)    = %d\n", isnan(INFINITY));
    printf("isnan(0.0)         = %d\n", isnan(0.0));
    printf("isnan(DBL_MIN/2.0) = %d\n", isnan(DBL_MIN/2.0));
    printf("isnan(0.0 / 0.0)   = %d\n", isnan(0.0/0.0));
    printf("isnan(Inf - Inf)   = %d\n", isnan(INFINITY - INFINITY));
}

可能的输出:

isnan(NAN)         = 1
isnan(INFINITY)    = 0
isnan(0.0)         = 0
isnan(DBL_MIN/2.0) = 0
isnan(0.0 / 0.0)   = 1
isnan(Inf - Inf)   = 1

[编辑] 参考

  • C11 standard (ISO/IEC 9899:2011):
  • 7.12.3.4 The isnan macro (p: 236-237)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.12.3.4 The isnan macro (p: 217)

[编辑] 参阅

(C99)
(C99)
(C99)
返回一个NaN (非数)
(函数) [edit]
对给定的浮点值分类
(函数) [edit]
检查给定数是否具有有限值
(函数) [edit]
(C99)
检查给定数是否是无穷大
(函数) [edit]
检查给定数是否正规
(函数) [edit]
检查两个浮点数值是否无序
(函数) [edit]
isnanC++文档