命名空间
变体
操作

nan、nanf、nanl、nand32、nand64、nand128

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

(C99)(C99)    

函数
基本操作
(C99)
(C99)
(C99)
nannanfnanlnandN
(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)
(C99)
(C99)
(C23)
宏常量
特殊浮点值
(C99)(C23)
参数和返回值
(C99)(C99)(C99)(C99)(C99)    
错误处理
(C99)    

 
在头文件 <math.h> 中定义
float       nanf( const char* arg );
(1) (自 C99)
double      nan( const char* arg );
(2) (自 C99)
long double nanl( const char* arg );
(3) (自 C99)
_Decimal32  nand32( const char* arg );
(4) (自 C23)
_Decimal64  nand64( const char* arg );
(5) (自 C23)
_Decimal128 nand128( const char* arg );
(6) (自 C23)

将实现定义的字符字符串 arg 转换为相应的安静 NaN 值,如同通过调用相应的解析函数 strtoX 一样,如下所示

  • 调用 nan("n-char-sequence"),其中 n-char-sequence 是数字、拉丁字母和下划线的序列,等效于调用 /*strtoX*/("NAN(n-char-sequence)", (char**)NULL);.
  • 调用 nan("") 等效于调用 /*strtoX*/("NAN()", (char**)NULL);.
  • 调用 nan("string"),其中 string 既不是 n-char-sequence 也不是空字符串,等效于调用 /*strtoX*/("NAN", (char**)NULL);.
1) 解析函数是 strtof.
2) 解析函数是 strtod.
3) 解析函数是 strtold.
4) 解析函数是 strtod32.
5) 解析函数是 strtod64.
6) 解析函数是 strtod128.

仅当实现预定义 __STDC_IEC_60559_DFP__(即实现支持十进制浮点数)时,才会声明返回十进制浮点值的函数。

(自 C23)

内容

[编辑] 参数

arg - 识别 NaN 内容的窄字符字符串

[编辑] 返回值

与标识字符串 arg 对应的静默 NaN 值,如果实现不支持静默 NaN,则为零。

如果实现支持 IEEE 浮点运算(IEC 60559),则它也支持静默 NaN。

[编辑] 错误处理

此函数不受 math_errhandling 中指定的任何错误条件的影响。

[编辑] 示例

#include <stdio.h>
#include <math.h>
#include <stdint.h>
#include <inttypes.h>
#include <string.h>
 
int main(void)
{
    double f1 = nan("1");
    uint64_t f1n; memcpy(&f1n, &f1, sizeof f1);
    printf("nan(\"1\")   = %f (%" PRIx64 ")\n", f1, f1n);
 
    double f2 = nan("2");
    uint64_t f2n; memcpy(&f2n, &f2, sizeof f2);
    printf("nan(\"2\")   = %f (%" PRIx64 ")\n", f2, f2n);
 
    double f3 = nan("0xF");
    uint64_t f3n; memcpy(&f3n, &f3, sizeof f3);
    printf("nan(\"0xF\") = %f (%" PRIx64 ")\n", f3, f3n);
}

可能的输出

nan("1")   = nan (7ff8000000000001)
nan("2")   = nan (7ff8000000000002)
nan("0xF") = nan (7ff800000000000f)

[编辑] 参考

  • C17 标准 (ISO/IEC 9899:2018)
  • 7.12.11.2 nan 函数 (p: 186-187)
  • F.10.8.2 nan 函数 (p: 386)
  • C11 标准 (ISO/IEC 9899:2011)
  • 7.12.11.2 nan 函数 (p: 256)
  • F.10.8.2 nan 函数 (p: 529)
  • C99 标准 (ISO/IEC 9899:1999)
  • 7.12.11.2 nan 函数 (p: 237)
  • F.9.8.2 fabs 函数 (p: 465)

[编辑] 参见

(C99)
检查给定数字是否为 NaN
(函数宏) [编辑]
(C99)
计算为类型 float 的静默 NaN
(宏常量) [编辑]
C++ 文档 for nanf, nan, nanl