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

Chr*_*ran 3 floating-point ieee-754 floating-point-precision

我继续看到64位IEEE浮点表示中有关53位精度的无意义.有人请向我解释一下,如果世界上有一点卡在其中,那么它对数字精度的贡献是什么?如果你有一个浮点单元,其中bit0被固定为1,你当然会知道它比正常情况下产生的精度要低1位.这些敏感性在哪里?

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

声称这第53位废话的所有书籍和文章都是错的,或者我是个白痴.但是卡住的是一个卡住的位.让我们听听相反的论点.

Eri*_*hil 10

IEEE-754 64位二进制浮点对象的数学有效位1具有53位.它编码有一个52位字段的专用于有效数和从指数字段,其指示是否53的一些信息的组合RD位是0或1.

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

从来没有使用有效数字的前导位(除了1以外).当指数的编码为零时,有效数的前导位为0而不是更频繁的1.


1 "有效"是首选术语,而不是"尾数".有效数是线性的,尾数是对数的.

  • @ChrisCochran:根据IEEE 754-2008第3.4节,如果E(指数的编码)为零且T(尾随有效数字段)不为零,则浮点数的值为(-1)**s •2**emin•(0 + 2**(1-p)•T),其中s是符号位,emin是最小指数(64位二进制为-1022),p是位精度(对于64位二进制,53表,每表3.5).因此,前导位为零(前导表中的前导位为"0")存在除零以外的数字. (3认同)
  • 另外,考虑到浮点值在相同范围内时,64位浮点中相邻可表示值之间的差异与53位整数中相邻可表示值之间的差异相同.给定64位浮点2**52,下一个可表示的值是2**52 + 1.给定53位整数中的2**52,下一个可表示的值是2**52 + 1.因此,当前导位在浮点中处于与53位整数的最高有效位相同的位置时,浮点具有与53位整数相同的精度. (3认同)
  • @Chris:同样,它们是低于正常的,而不是下溢.这些术语具有精确的技术含义,在IEEE 754-2008中定义.实际上,有效数据具有53位自由度,因为在正常情况下,当有效数的前导位为零时,您只需减小指数,这样可以将以前的1位设置为零**和**在低端给你一个新的位.你在争论单词,但**在数学上**你可以用浮点值做任何事情,你可以用53位精度做.**数学效应**是53位精度. (3认同)
  • @ChrisCochran:这种解释是不正确的; 额外的位确实来自隐含位,而不是来自缩放因子.考虑Intel 80位格式,它没有隐含位; 它有一个64位有效数字字段,该格式的数字有64位精度.单独缩放不会神奇地授予额外的精确度; 隐含位是必要的. (3认同)

Pat*_*han 6

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

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

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

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

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

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