isnan

来自cppreference.com
< c‎ | numeric‎ | math
 
 
 
常用数学函数
类型
(C99)(C99)    

(C99)(C99)    

函数
基本运算
(C99)
(C99)
(C99)
(C99)(C99)(C99)(C23)
最大/最小运算
(C99)
(C23)    
指数函数
(C23)
(C99)
(C99)
(C23)
(C23)
(C99)
(C99)(C23)
(C23)
(C23)
幂函数
(C99)
(C23)
(C23)
(C99)
(C23)
(C23)
三角及双曲函数
(C23)
(C23)
(C23)
(C23)
(C99)
(C99)
(C99)
误差及伽马函数
(C99)
(C99)
(C99)
(C99)
临近整数的浮点运算
(C99)(C99)(C99)
(C99)
(C99)(C99)(C99)
(C23)(C23)(C23)(C23)
浮点操作函数
(C99)(C99)
(C99)(C23)
(C99)
窄化运算
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
量与量指数函数
十进制重编码函数
全序与载荷函数
分类
(C99)
isnan
(C99)
(C99)
(C23)
宏常量
特殊浮点值
(C99)(C23)
参数与返回值
(C99)(C99)(C99)(C99)(C99)    
错误处理
(C99)    

 
在标头 <math.h> 定义
#define isnan(arg) /* 由实现定义 */
(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 <float.h>
#include <math.h>
#include <stdio.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

引用

  • C23 标准(ISO/IEC 9899:2024):
  • 7.12.3.4 The isnan macro (第 TBD 页)
  • C17 标准(ISO/IEC 9899:2018):
  • 7.12.3.4 The isnan macro (第 TBD 页)
  • C11 标准(ISO/IEC 9899:2011):
  • 7.12.3.4 The isnan macro (第 236-237 页)
  • C99 标准(ISO/IEC 9899:1999):
  • 7.12.3.4 The isnan macro (第 217 页)

参阅

(C99)(C99)(C99)
返回 NaN(非数)
(函数)
对给定的浮点值分类
(宏函数)
检查给定数是否具有有限值
(宏函数)
(C99)
检查给定数是否是无穷大
(宏函数)
检查给定数是否正规
(宏函数)
检查两个浮点数值是否无序
(宏函数)