浮点精度是52位还是53位?

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

我不断看到这种关于 64 位 IEEE 浮点表示中 53 位精度的废话。 有人可以向我解释一下,世界上一个带有 1 的位对数字精度有什么贡献吗? 如果您有一个浮点单元,其中 bit0 固定为 1,您当然会知道它产生的精度比正常情况下少 1 位。 那些敏感度在哪里?

此外,只有指数(没有尾数的比例因子)完全准确地指定了数字的前导位在哪里,因此从未使用过前导位。 第 53 洞与第 19 洞差不多真实。 它只是一个(有用的)拐杖,可以帮助人类思维和访问二进制值的逻辑。 否则就是重复计算。

要么所有声称这第 53 位废话的书籍和文章都是错误的,要么我是个白痴。 但卡住的位就是卡住的位。 让我们听听相反的论点。

floating-point ieee-754 floating-point-precision
3个回答
20
投票
IEEE-754 64 位二进制浮点对象的

数学有效数1 有 53 位。它由专门用于有效数尾随位的 52 位字段和指数字段中的一些信息(指示前导 53rd 位是 0 还是 1)的组合进行编码。

由于尾随有效数字段为 52 位,因此有些人将有效数称为 52 位,但这是一个草率的术语。尾数字段不包含尾数的所有信息,完整的尾数为 53 位。

有效数的前导位从未被使用(除了 1 之外的任何其他位)是不正确的。当指数的编码为零时,有效数的前导位为 0,而不是更常见的 1。


1 “有效数”是首选术语,而不是“尾数”。有效数是线性的,尾数是对数的。


6
投票

这里的关键概念是“标准化”。在一般科学记数法中,每个值都有多种表示形式。这使得算术,尤其是比较,变得比必要的更加困难。常见的解决方案是要求有效数的最高有效位非零。例如,我使用的第一个浮点系统是以 16 为基数的,有效数字的前导数字在 1 到 F 的范围内。

这对于二进制浮点有特殊效果。有效数的最高有效位是非零位。没有必要将物理表示中有限数量的比特浪费在已知非零的比特上。

IEEE 754 64 位二进制中的普通数字具有 53 位有效数,其隐式前导位已知为 1,其余 52 位存储在物理表示中。

天下没有免费的午餐,这是有代价的。成本是对给定指数可以存储的数字的大小的限制。对于大多数无关紧要的指数 - 该数字只是以较小的指数存储,并且仍然具有不需要存储的前导一位。

这将是零指数的真正限制,因为没有更小的指数可供使用。 IEEE 754 二进制浮点通过以不同方式存储非常小的数值(指数为零)来解决这个问题。它们最多有 52 个有效位,全部存储,允许有前导零。这允许非常小的数量级数字表示为非零数字,但代价是精度降低。

无穷大和 NaN 的存储方式不同,全为指数。


0
投票

没有卡住。指数将移动“卡住”的位,这样它就不会被困在固定位置

事实上,隐藏位始终是归一化后的最高有效位。由于它始终设置为标准化值,因此没有必要显式保存它。省略它可以稍微提高精度,这是一件好事

因此,我们将存储 0.xxx...xxx × 2exp,而不是 1.xxx...xxx × 2exp,并在对其进行操作之前将整数部分设置为 1。隐藏位确实会影响结果的值,而不是毫无意义地躺在那里。这与我们将十进制值范围标准化为 [0, 1) 时的情况相同。在这种情况下,整数部分始终为零并且可以省略(在某些文化中)。释放的空间可以用于另一位精度

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