15

是的,我的意思是说80-bit。那不是笔误...

我在浮点变量方面的经验总是涉及 4 字节的倍数,比如单数(32 位)、双数(64 位)和长双数(我曾见过它被称为 96 位或 128 位)。这就是为什么当我在编写一些代码以读取和写入AIFF(音频交换文件格式)文件时遇到80 位扩展精度数据类型时有点困惑:选择了扩展精度变量来存储采样音轨的速率。

当我浏览 Wikipedia 时,我发现上面的链接以及IEEE 754-1985 标准摘要中的 80 位格式的简要说明(但不在IEEE 754-2008 标准摘要中)。似乎在某些架构上“扩展”和“长双”是同义词。

我没有遇到的一件事是使用扩展精度数据类型的特定应用程序(当然,AIFF 文件采样率除外)。这让我想知道:

  • 有没有人遇到过扩展精度对于某些编程应用程序是必要/有益的情况?
  • 80 位浮点数的好处是什么,除了明显的“它比 double 精度高一点,但比 long double 的大多数实现少字节”?
  • 它的适用性正在减弱吗?
4

5 回答 5

25

英特尔的 FPU 在内部使用 80 位格式来获得更高的中间结果精度。

也就是说,你可能有 32 位或 64 位的变量,但是当它们被加载到 FPU 寄存器中时,它们会被转换为 80 位;FPU 然后(默认情况下)在 80 中执行所有计算,但是;计算后,将结果存储回 32 位或 64 位变量中。

顺便说一句 - 一个有点不幸的结果是调试和发布构建可能会产生稍微不同的结果:在发布构建中,优化器可能会在 80 位 FPU 寄存器中保留一个中间变量,而在调试构建中,它将被存储在 64 位变量中,导致精度损失。您可以通过使用 80 位变量来避免这种情况,或者使用 FPU 开关(或编译器选项)以 64 位执行所有计算。

于 2009-03-04T21:56:43.350 回答
9

对我来说,使用 80 位是必不可少的。这样,当使用 GOTO 库进行矢量内积时,我得到对称矩阵的高阶 (30,000) 特征值和特征向量,还有四个数字,即,对于我在相对论原子中使用的那种矩阵,我使用 13 个有效数字而不是 9 个有效数字计算,这是避免掉入负能量状态的海洋所必需的。我的另一个选择是使用四倍精度算法,它将 CPU 时间增加 60-70 倍,同时也增加了 RAM 需求。任何依赖于大向量内积的计算都会受益。当然,为了将部分内积结果保存在寄存器中,有必要使用汇编语言,就像在 GOTO 库中一样。这就是我爱上我的旧 Opteron 850 处理器的原因,

80 位速度快,而精度更高却慢得多的原因是 CPU 的标准浮点硬件具有 80 位寄存器。因此,如果您想要额外的 16 位(11 位额外的尾数、4 位额外的指数和 1 位有效未使用的额外位),那么从 64 位扩展到 80 位实际上并不会花费太多——而扩展就运行时间而言,超过 80 位的成本非常高。因此,如果您愿意,不妨使用 80 位精度。使用它不是免费的,但它相当便宜。

于 2012-03-30T13:23:08.287 回答
5

维基百科解释说 80 位格式可以表示整个 64 位整数而不会丢失信息。因此CPU的浮点单元可以用来实现整数的乘法和除法。

于 2009-03-04T21:56:35.033 回答
2

80 位类型尚未提及的另一个优点是,在 16 位或 32 位处理器上,它们没有浮点单元但确实有一个“乘法”指令,它产生的结果是操作数的两倍(16x16 ->32 或 32x32->64),将 64 位尾数细分为四个或两个 16 位或 32 位寄存器的算术将比 53 位尾数上的算术更快,后者跨越相同数量的寄存器但具有与符号和指数共享 12 个寄存器位。对于不需要比 更精确的应用程序,float48 位“扩展浮点”类型的计算同样可能比 32 位float.

虽然有些人可能会抱怨扩展精度类型的双舍入行为,但实际上这只是需要完全位精确跨平台再现性的专业应用程序中的问题。从准确性的角度来看,64/128 与 65/128 或 1024/2048ulp 与 1025/2048 的舍入误差之间的差异不是问题;在具有扩展精度变量类型一致的扩展精度语义的语言中,在许多没有浮点硬件的平台(例如嵌入式系统)上使用扩展类型将提供比单精度或双精度浮点更高的精度和更快的速度类型。

于 2015-02-17T18:01:33.873 回答
1

我使用 80 位进行一些纯数学研究。我不得不对一个变得非常大的无限级数求和,超出了双精度数的范围。收敛性和准确性不是问题,只是处理像 1E1000 这样的大指数的能力。也许一些聪明的代数可以简化一些事情,但是仅仅编写一个具有扩展精度的算法要比花任何时间思考它更快、更容易。

于 2010-01-18T17:07:48.760 回答