1

我的编译器告诉我 的大小sizeof(long double)是 16 字节,这意味着它可以表示一个数字 up 2^128。现在,我想知道精度可以处理多少位数。例如,如果x= 0.1234567812345678,可以long double识别这里的确切精度x吗?

谢谢

4

2 回答 2

5

float.h包含一些描述不同浮点数据类型精度的宏;例如LDBL_MANT_DIG,为您提供 a 的尾数中的二进制位数long double

如果您不了解浮点数的格式,我建议您阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic

于 2017-04-21T14:54:51.770 回答
0

我想知道精度可以处理多少位数。

LDBL_DIG, in <float.h>, 是将从文本转换为有long double 区别的有效十进制数字的最小数量。在您的平台上,它至少是 10 并且可能是 18 左右。 0.1234567812345678123.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.

于 2017-04-21T15:58:45.803 回答