nanl函数
概要:
#include <math.h> long double nanl(const char *tagp);
描述:
该函数根据以下规则转换参数tagp指向的字符串:
调用函数nanl("n-char-sequence")等价于调用函数strtold("NAN(n-char-sequence)", nullptr);调用函数nanl("")等价于调用函数strtold("NAN()", nullptr)。
如果参数tagp未指向n-char-sequence序列或者空字符串,调用该函数等价于调用函数strtold("NAN", nullptr)。
参数:
const char *tagp
参数为指向n-char-sequence序列或者空字符串的指针。
返回值:
函数返回安静非数值(如果可用),其内容通过参数tagp确定。如果实现不支持安静非数值,函数返回0。
范例:
|
|
输出:
nanl(""): 7fffc000000000000000
nanl("1"): 7fffc000000000000001
(注:使用ideone编译。)
Linux/GCC编译条件下,long double类型对象占16字节;但实际有效精度是80位,其余48个位是填充位。
有效精度位分配如下表所示:
| 组成部分 | 位数 | 位置(从高位开始) | 描述 |
| 符号位 (sign bit) |
1 | 第79位 | 0表示正数,1表示负数。 |
| 指数位 (exponent bits) |
15 | 第78~64位 | 存储的是实际指数+偏置值(16383)。 |
| 整数位 (integer bit) |
1 | 第63位 | 无穷大、非数值、规格化数时值为1;其余为0。 |
| 有效数字位 (significand bits) |
63 | 第62~0位 | 存储尾数部分。 |
非数值时,指数位全为1,整数位为1,有效数字位不全为0;因此7fffc000000000000000、7fffc000000000000001表示的均为非数值。详细解释见浮点数的数值范围。
相关内容:
| nan | double类型的生成安静非数值的函数。 |
| nanf | float类型的生成安静非数值的函数。 |
| nand32 | _Decimal32类型的生成安静非数值的函数。 |
| nand64 | _Decimal64类型的生成安静非数值的函数。 |
| nand128 | _Decimal128类型的生成安静非数值的函数。 |
主要参考资料: