2017-04-21 102 views
1

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

谢谢

+4

“[[]]这意味着它可以代表一个数字2^128” - 呃不,它不是你知道的整数。所有位不可用于存储整数部分。 – unwind

+0

请注意,实际的浮点数可能只有80位(如果您在x86上)。编译器保留128位进行对齐。 –

回答

0

我想知道,直到有多少数字的精度可以处理。

LDBL_DIG,在<float.h>,是显著十进制数字最小数目将从文本转换为long double区别的数量。在你的平台上,它至少有10个,可能是18个左右。 0.1234567812345678123.4567812345678有16位重要的十进制数字。


我的编译器告诉我的sizeof的大小(长双)为16字节,这意味着它可以代表人数多达2^128

这可能意味着类似的东西如果long double是一个整数,但浮点数分布为logarithmically。此外,有些系统不会将全部16个字节用于数据。有些是填充。 @unwind@Sven Marnach。使用<float.h>中的值来表征您的平台正在使用的long double


如果x= 0.1234567812345678,可以long double识别x准确精度?

不,除非您在使用十进制浮点的罕见平台上。

大多数平台使用二进制浮点。因此,除非数字可以表示为2的幂的精确和,例如42.125,否则保存为long double的值将为近似值。代码将文本0.1234567812345678转换为最近的long double,其可能具有精确值0.1234567812345677972896140772718354128301143646240234375

+0

非常感谢。清晰准确的答案:) – Medo