为什么Intel x87寄存器是80位宽?

Joh*_*ugo 7 x86 assembly intel computer-architecture x87

为什么使用如此"怪异"的寄存器大小?关于为什么不优选使用64或128位这些寄存器的任何文档?

Guf*_*ffa 9

IEEE 754-1985标准维基百科页面上,对80位扩展格式有一个非常好的解释:

"该标准还建议使用扩展格式来执行内部计算,其精度高于最终结果所需的精度,以最大限度地减少舍入误差"

双精度浮点数以64位表示.您可能需要更多的位来获得更高的中间结果精度,但是当您在最终结果中只需要64位时,使用128位类型将是过度的.

80位是大于64位的合理偶数位.

考虑到建立这些标准时的数据总线是8位或16位,而不是今天的32位或64位.如果今天写入标准,则96位将是更合理的数字,或者即使所有这些位都不用于计算,数据也可能以128位传输.

  • 80 位格式的另一个优点是许多没有 FPU 的机器可以比处理 53 位尾数和 12 位指数/符号字段更有效地处理 64 位尾数和 16 位指数/符号字. 太糟糕了,许多编译器供应商忽略了正确支持 80 位类型,因为它允许使用比没有它时所需的步骤少得多的步骤来完成许多操作。 (6认同)
  • 专门选择了带有 64 位尾数的 80 位,以便可以在不损失精度的情况下取对数(因为对数将指数 + 尾数映射到尾数)。 (4认同)
  • @fuz:njuffa关于[为什么更高精度浮点格式有这么多指数位?](/sf/ask/2854316461/)的回答提到,在扩展精度格式中拥有足够宽的尾数可以快速实现尽管幂运算的误差放大了,但还是用简单的算法对“double”进行了幂运算。 (2认同)