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

C why is the DBL_MANT_DIG macro defined as 53 [duplicate]

提问人:Björn Max Jakobsen 提问时间:1/14/2022 最后编辑:phuclvBjörn Max Jakobsen 更新时间:1/15/2022 访问量:352

问:

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

C 浮点 精度 IEEE-754

评论


答:

3赞 Serge Ballesta 1/14/2022 #1

事实上,二进制 IEE 754 表示包括一个隐藏位:对于普通数字,尾数的前导必须为 1,因此不必存储它。所以尾数实际上是前导 1 位加上其他 52 位,这给出了......53

来自维基百科的参考资料(强调我的):

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

评论

1赞 Arc 1/15/2022
隐性远胜于隐性,我认为前者更严重,后者具有误导性。