nan, nanf, nanl, nand32, nand64, nand128

来自cppreference.com
< 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 值,分别如同以下列方式调用 strtodstrtofstrtold

  • 调用 nan("n-字符序列"),其中 n-字符序列 是数字、拉丁字母和下划线的序列,等价于调用 /*strtoX*/("NAN(n-字符序列)", (char**)NULL);
  • 调用 nan("") 等价于调用 /*strtoX*/("NAN()", (char**)NULL);
  • 调用 nan("字符串"),其中 字符串 既非 n-字符序列 亦非空字符串,等价于调用 /*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 The nan functions (第 186-187 页)
  • F.10.8.2 The nan functions (第 386 页)
  • C11 标准(ISO/IEC 9899:2011):
  • 7.12.11.2 The nan functions (第 256 页)
  • F.10.8.2 The nan functions (第 529 页)
  • C99 标准(ISO/IEC 9899:1999):
  • 7.12.11.2 The nan functions (第 237 页)
  • F.9.8.2 The fabs functions (第 465 页)

[编辑] 参阅

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