4

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

此外,只有指数,即没有尾数的比例因子,完全指定了数字的前导位的确切位置,因此没有使用前导位。第 53 位和第 19 洞一样真实。它只是帮助人类思维和以二进制形式访问此类值的逻辑的(有用的)拐杖。否则就是重复计算。

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

4

3 回答 3

12

IEEE-754 64 位二进制浮点对象的数学有效位1有 53 位。它由专门用于有效数字的 52 位字段和指数字段中的一些信息组合而成,指示第 53是 0 还是 1。

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

有效数字的前导位从不使用(作为 1 以外的任何值)是不正确的。当指数的编码为零时,有效数的前导位为 0,而不是更频繁的 1。


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

于 2013-08-23T18:36:43.360 回答
4

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

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

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

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

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

无穷大和 NaN 的存储方式不同,所有的都是指数。

于 2013-08-23T20:21:28.617 回答
0

它没有卡住。指数将移动“卡住”位,因此它不会被困在固定位置

事实上,隐藏位始终是标准化后的最高有效位。由于它始终设置为标准化值,因此明确保存它是没有意义的。省略它会稍微提高精度,这是一件好事

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

于 2015-04-18T07:17:44.313 回答