Floating point 如何根据位数计算精度的小数位数?

Floating point 如何根据位数计算精度的小数位数?,floating-point,precision,decimal-point,Floating Point,Precision,Decimal Point,我正在学习浮点格式(IEEE)。 在单精度浮点格式中,提到尾数有24位,因此它有6个1/2的精度小数位数(根据《了解机器》一书),以及 我不明白精度的小数位数是如何计算的。 有人能告诉我吗?有24位,假设为符号保留了一位,那么可以表示的最大十进制数是2^23-1=8388607。也就是说,你可以得到6位数,有时是7位数。这通常表示为“6 1/2位”。如果24位表示无符号数,则可以存储的最大值为2^24-1=16777215,或7和小数位数 当有人引用一个带有明确小数位数的数字时,比如7.22位小

我正在学习浮点格式(IEEE)。 在单精度浮点格式中,提到尾数有24位,因此它有6个1/2的精度小数位数(根据《了解机器》一书),以及

我不明白精度的小数位数是如何计算的。
有人能告诉我吗?

有24位,假设为符号保留了一位,那么可以表示的最大十进制数是2^23-1=8388607。也就是说,你可以得到6位数,有时是7位数。这通常表示为“6 1/2位”。如果24位表示无符号数,则可以存储的最大值为2^24-1=16777215,或7和小数位数

当有人引用一个带有明确小数位数的数字时,比如7.22位小数,他们所做的就是取最大值的对数(以10为基数)。所以log(16777115)=7.22

通常,从给定位数中获得的十进制位数为:

d=log[base 10](2^b)
其中,b是位数,d是小数位数。然后:

d=b * log(2)
d~=b * .3010

所以24位给出24*.3010=7.224

@jay,这应该是log(16777215)而不是log(16777115)?@ShmilTheCat是的。输入错误。我只是想补充一点,你关于符号位的观点是无效的。尾数是24位,符号位不是尾数的一部分。实际上,如果你看位的话,它就是[符号位,指数,尾数]。参见标准。符号位始终作为IEEE 754标准的一部分存在,因此数字始终是有符号的。总之,所有24位都用来表示尾数,所以log[10](2^24)=7.22,如问题中所述。@westy92我说的是整数。是的,对于浮点数,一些位数被分配给指数。多少会影响我们可以记录的数字范围,但不会影响精确位置的数量。对于那些不知道的人来说,与指数或符号相反,用来保存实际数字的位被称为“尾数”,这就是我们在这里的目的。@westy92哦,回头看,我看到这个问题是专门针对IEEE浮点的。因此,是的,符号位不包括在24中。有关训练和答案的解释,请参阅。