gpt4 book ai didi

floating-point - 为什么高精度浮点格式具有这么多指数位?

转载 作者:行者123 更新时间:2023-12-04 06:41:07 25 4
gpt4 key购买 nike

我一直在研究IEEE 754x87浮点格式。总结如下:

                Total       Bits per field
Precision Bits Sign Exponent Mantissa
Single 32 1 8 23 (+1 implicit)
Double 64 1 11 52 (+1 implicit)
Extended (x87) 80 1 15 64
Quadruple 128 1 15 112 (+1 implicit)

我的问题是,为什么高精度格式有这么多指数位?单精度为您提供的最大值约为10 ^ 38,在极端情况下(宇宙中的原子数),您可能需要更大的指数。但是 double 达到〜10 ^ 308,而扩展精度和四精度具有更多的指数位。这似乎比实际的硬件加速计算所必需的要大得多。 (负指数甚至更荒谬!)

话虽这么说,尾数位显然很有值(value),以至于我认为必须有充分的理由牺牲尾数以支持指数。那是什么我认为这可能是为了表示两个相邻值之间的差异而无需使用次法线,但是即使这样,指数也不会发生很大变化(在+1023到-1022的整个范围内为-6则为两倍)。

最佳答案

当英特尔着手创建8087数学协处理器时,加州大学伯克利分校的威廉·卡汉(William Kahan)教授曾作为英特尔的顾问工作而使IEEE-754浮点标准脱胎换骨。成为IEEE-754浮点格式的设计标准之一是在最大程度上与现有专有浮点格式进行功能兼容。这本书

John F. Palmer和Stephen P. Morse,“8087入门”。 1984年,纽约威利。

特别提到CDC 6600的60位浮点格式,
对于 double 格式,其指数为11位,尾数为48位。

以下发布的访谈(莫名其妙地使Jerome Coonen的名字改成Gerome Kunan)提供了简短的信息
IEEE-754的起源概述,包括对浮点格式选择的讨论:

Charles Severance,“IEEE 754:对William Kahan的访谈”,IEEE计算机,第1卷。 1998年3月31日第3期,第114-115页
(online)

在采访中,威廉·卡汉(William Kahan)提到了非常流行的DEC VAX小型计算机采用浮点格式的情况,特别是F format用于具有8个指数位的单精度,而G format用于具有11个指数位的 double 。

VAX F格式可追溯至DEC较早的PDP-11架构,并且在PDP-11/40 Technical Memorandum #16中陈述了选择8个指数位的基本原理:希望能够表示所有重要的物理常数,包括Plank常数(6.626070040 x 10-34)和Avogadro常数(6.022140857 x 1023)。

VAX最初使用D format来实现 double ,它使用与F格式相同数量的指数位(即8)。这被发现
James Demmel在NA Digest Sunday, February 16, 1992 Volume 92 : Issue 7中的一篇文章指出,中间计算中的下溢会引起麻烦,例如在LAPACK线性代数例程中。
在Kahan的采访中也提到了这个问题,其中提到后来引入的VAX G格式是受CDC 6600浮点格式启发的。

大卫·斯蒂芬森(David Stephenson),“二进制浮点算术的拟议标准”,IEEE计算机,第1卷。 1981年3月,第14卷,第3期,第51-62页
(online)

解释了IEEE-754 double 的指数位数的选择,如下所示:

For the 64-bit format, the main consideration was range; as a minimum, the desire was that the product of any two 32-bit numbers should not overflow the 64-bit format. The final choice of exponent range provides that a product of eight 32-bit terms cannot overflow the 64-bit format — a possible boon to users of optimizing compilers which reorder the sequence of arithmetic operations from that specified by the careful programmer.



IEEE-754的“扩展”浮点类型特别是作为中间格式引入的,它们简化了对相应“常规”浮点类型的精确标准数学函数的实现。

Jerome T. Coonen,“对二进制浮点算法拟议标准的贡献”。博士学位论文,大学1984年,加利福尼亚州伯克利分校

指出前驱是IBM 709x和Univac 1108机器中的扩展累加器,但我不熟悉用于这些的格式。

根据Coonen的说法,扩展格式中的尾数位数的选择是由二进制十进制转换以及一般指数xy的需求决定的。 Palmer/Morse还提到了幂运算,并提供了详细信息:由于幂运算的错误放大特性,使用扩展格式的朴素计算需要在尾数中与在常规范式的指数中有多少位一样多,才能提供准确的结果。 。由于 double 使用11个指数位,因此双扩展格式需要64个尾数位。

除了Coonen的博士论文之外,我还检查了在IEEE-754标准发布之前发布的文档草稿,并且找不到以双扩展格式表示的15个指数位的明确理由。

从使用x87浮点单元的个人设计经验中,我知道基本数学函数的直接实现(没有中间溢出的危险)至少会激发三个额外的指数位。特别地,使用15位可能是硬件设计的产物。 8086 CPU使用16位字作为基本构建块,因此在双扩展格式中需要64个尾数位将导致该格式包含80位(= 5个字),为指数保留15位。

关于floating-point - 为什么高精度浮点格式具有这么多指数位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40775949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com