【发布时间】:2026-02-05 09:10:01
【问题描述】:
我一直在阅读,似乎 IEEE 754 将 64 位浮点数(双)指数定义为 11 位。 (https://en.wikipedia.org/wiki/Double-precision_floating-point_format)
我的问题是为什么?
64 位浮点数有 53 位有效数(第一位暗示为 1,因此实际只存储了 52 位)-因此您需要指数至少能够表示数字 53(以便能够将二进制小数点移动到有效数字中的任何位置),所以现在你需要 7 位。
那么你还需要负指数,所以 8 位。
您还需要 0、负无穷和正无穷以及 NaN- 的表示(它们需要 4 个额外的表示),所以我猜是 10 位。
所以我的问题是:为什么指数是 11 位而不是 10 或 12,以及如何确定其他长度的浮点数?
【问题讨论】:
-
是二进制点,不是小数点。我不明白你的推理。如果你想要一个非常高精度的窄范围类型,你可以有一个更小的指数字段,并将这些位用于更多有效位。要以精度为代价获得更宽的范围,请使用更多的指数位和更少的有效位。
-
我觉得你不太了解隐藏的部分。 在规范化值的存储表示中省略了它,因为它始终为 1。但是如果您将这样的浮点数分解为其单个组件(或者如果硬件这样做,内部),它被添加到有效数字。这不会影响指数。
-
我确实理解隐藏的位:它显然是 1,所以为什么要存储它。但我的问题是关于指数,而不是有效数字,请参阅编辑
-
@Isauceda:我猜不是完全武断的(他们选择它时我不在场)。但是 52 + 11 + 1 = 64,所以他们在有效位和指数(和符号)的剩余位之间选择了某种很好的平衡。他们也可以使用 48 + 15 + 1,但这会最小化精度(但会大大提高范围)。您可以说 53 或多或少是“任意”选择的。
-
@Isauceda 我回答了一个非常相似的问题here
标签: floating-point double precision ieee-754