命名空间
变体
操作

nan, nanf, nanl, nand32, nand64, nand128

来自 cppreference.cn
< c‎ | 数值‎ | 数学
 
 
 
常用数学函数
函数
基本操作
(C99)
(C99)
(C99)
nannanfnanlnandN
(C99)(C99)(C99)(C23)
最大值/最小值操作
(C99)
(C99)
指数函数
(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)
(C23)(C23)(C23)(C23)
浮点数操作
(C99)(C99)
(C99)(C23)
(C99)
窄化操作
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
量子与量子指数
十进制重新编码函数
总序和载荷函数
分类
(C99)
(C99)
(C99)
(C23)
误差函数和伽马函数
(C99)
(C99)
(C99)
(C99)
类型
宏常量
特殊浮点值
(C99)(C23)
参数和返回值
错误处理
快速操作指示符
 
定义于头文件 <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++ 文档,关于 nanf, nan, nanl