命名空间
变体
操作

nan, nanf, nanl, nand32, nand64, nand128

来自 cppreference.cn
< c‎ | numeric‎ | math
 
 
 
常用数学函数
函数
基本操作
(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