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

时间:2017-04-21 14:51:17

标签: c long-double

我的编译器告诉我Dim nextButton As New ImageButton With nextButton .ID = "nextButton" & directionID.ToString AddHandler .Click, AddressOf directionPath_Click End With 的大小是16字节,这意味着它可以代表一个数字sizeof(long double)。现在,我想知道精度可以处理多少位数。例如,如果2^128x= 0.1234567812345678可以long double确定x的确切精度吗?

谢谢

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

  

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

LDBL_DIG中的

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

  

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

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

  

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

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

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