C 为什么 DBL_MANT_DIG 宏定义为 53 [重复]

问题描述 投票:0回答:1

我想知道为什么 DBL_MANT_DIG 设置为 53,即使 ieee 754 标准使用 52 个尾数位。它也计算符号位吗?

c floating-point precision ieee-754
1个回答
3
投票

事实上,二进制 IEEE 754 表示法包含一个“隐藏位”:对于普通数,尾数的前导位必须为 1,因此不必存储它。所以尾数实际上是前导 1 位加上其他 52 位,得出...... 53 来自

维基百科

的参考文献(强调我的):

对于指数在正常范围内的数字(指数字段既不是全 1 也不是全 0),有效数的前导位将始终为 1。因此,前导 1 可以隐含在内存编码中,而不是明确存在于内存编码中,并且根据标准,有效数的显式表示部分将位于 0 和 1 之间。此规则称为“前导位约定”、“隐式位约定”或“隐藏位约定”。该规则允许二进制格式具有
额外的精度

© www.soinside.com 2019 - 2024. All rights reserved.