我的编译器告诉我 的大小sizeof(long double)
是 16 字节,这意味着它可以表示一个数字 up 2^128
。现在,我想知道精度可以处理多少位数。例如,如果x= 0.1234567812345678
,可以long double
识别这里的确切精度x
吗?
谢谢
我的编译器告诉我 的大小sizeof(long double)
是 16 字节,这意味着它可以表示一个数字 up 2^128
。现在,我想知道精度可以处理多少位数。例如,如果x= 0.1234567812345678
,可以long double
识别这里的确切精度x
吗?
谢谢
标头float.h
包含一些描述不同浮点数据类型精度的宏;例如LDBL_MANT_DIG
,为您提供 a 的尾数中的二进制位数long double
。
如果您不了解浮点数的格式,我建议您阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic。
我想知道精度可以处理多少位数。
LDBL_DIG
, in <float.h>
, 是将从文本转换为有long double
区别的有效十进制数字的最小数量。在您的平台上,它至少是 10 并且可能是 18 左右。 0.1234567812345678
并123.4567812345678
有 16 位有效十进制数字。
我的编译器告诉我 sizeof(long double) 的大小是 16 字节,这意味着它可以表示 2^128 以上的数字
如果是一个整数,它可能意味着类似的东西long double
,但浮点数是对数分布的。此外,一些系统不会将所有 16 个字节用于数据。有些是填充。@unwind @Sven Marnach。使用 中的值<float.h>
来描述long double
您的平台正在使用的特性。
如果
x= 0.1234567812345678
,能long double
识别出准确的精度x
吗?
不,除非您在使用十进制浮点的稀有平台上。
大多数平台使用二进制浮点。因此,除非该数字可以表示为 2 的精确幂和,例如 42.125,否则保存为 a 的值long double
将是附近的近似值。代码会将文本转换0.1234567812345678
为最接近 long double
的文本,其精确值可能为0.1234567812345677972896140772718354128301143646240234375
.