如何识别long double数据类型的精度

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

谢谢

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

LDBL_DIG是将从文本转换为long double的最小有效小数位数。 您的平台至少有10个,可能是18个左右。 0.1234567812345678123.4567812345678有16位有效小数。


我的编译器告诉我sizeof(long double)的大小是16字节,这意味着它可以代表一个数字2 ^ 128

如果long double是一个整数,它可能意味着类似的东西,但是浮点数是以对数方式分布的。 此外,某些系统不会将所有16个字节用于数据。 有些是填充物。 @unwind @Sven Marnach 。 使用的值来表征平台正在使用的long double


如果x= 0.1234567812345678 ,可以long double精确定x的精确度吗?

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

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

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

如果你不理解浮点数的格式,我建议你阅读每个计算机科学家应该知道的关于浮点运算的内容 。