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)
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么高精度格式有这么多指数位?单精度可为您提供约10 ^ 38的最大值,我可以看到在极端情况下(宇宙中的原子数)您可能需要更大的指数。但是双精度达到〜10 ^ 308,而扩展精度和四精度具有更多的指数位。这似乎比实际的硬件加速计算所必需的要大得多。(负指数甚至更荒谬!)
话虽如此,尾数位显然很有价值,以至于我认为必须有充分的理由牺牲尾数以支持指数。那是什么 我认为这可能是为了表示两个相邻值之间的差异而无需使用次法线,但是即使这样,指数也不会发生太大变化(在+1023到-1022的整个范围内为-6为两倍)。
当英特尔着手创建8087数学协处理器时,加州大学伯克利分校的威廉·卡汉(William Kahan)教授曾作为英特尔的顾问工作而使IEEE-754浮点标准脱胎换骨。成为IEEE-754浮点格式的设计标准之一是在最大程度上与现有专有浮点格式进行功能兼容。这本书
John F. Palmer和Stephen P. Morse,“ 8087入门”。1984年,纽约威利。
特别提到CDC 6600的60位浮点格式,相对于双精度格式,它具有11位指数和48位尾数。
以下已发表的访谈(莫名地将Jerome Coonen的名字改成Gerome Kunan)简要概述了IEEE-754的产生,并讨论了浮点格式的选择:
Charles Severance,“ IEEE 754:与William Kahan的访谈”,IEEE计算机,第1卷。1998年3月31日第3期,第114-115页 (在线)
在采访中,威廉·卡汉(William Kahan)提到了极为流行的DEC VAX小型计算机采用浮点格式的情况,特别是采用8指数位的单精度F格式和G格式。表示11位指数位的双精度。
VAX F格式可追溯至DEC较早的PDP-11架构,PDP-11 / 40技术备忘录#16中阐明了选择8个指数位的基本原理:希望能够代表所有重要的物理常数,包括木板常数(6.626070040 x 10 -34)和Avogradro常数(6.022140857 x 10 23)。
VAX最初使用D格式实现双精度,它使用与F格式相同数量的指数位(即8)。詹姆斯·戴梅尔(James Demmel)在1992年2月16日(星期日)的《国家文摘》( Na Digest)第92卷第7期中指出,这在中间计算中由于下溢而引起麻烦,例如在LAPACK线性代数例程中。在与Kahan的访谈中也提到了这个问题,其中提到后来引入的VAX G格式是受CDC 6600浮点格式启发的。
大卫·斯蒂芬森(David Stephenson),“二进制浮点算术的拟议标准”,IEEE计算机,第1卷。1981年3月,第14卷,第3号),第51-62页 (在线)
解释了IEEE-754双精度的指数位数的选择,如下所示:
对于64位格式,主要考虑因素是范围。最低要求是,任何两个32位数字的乘积都不应溢出64位格式。指数范围的最终选择是,八个32位项的乘积不会溢出64位格式,这对优化编译器的用户来说可能是福音,这些编译器会按照精心设计的程序员指定的顺序对算术运算的顺序进行重新排序。
IEEE-754的“扩展”浮点类型特别是作为中间格式引入的,它们简化了对相应“常规”浮点类型的精确标准数学函数的实现。
Jerome T. Coonen,“对二进制浮点算法拟议标准的贡献”。博士学位论文,大学 加州伯克利分校1984
指出在IBM 709x和Univac 1108机器中,前体是扩展的累加器,但是我对这些格式不熟悉。
根据Coonen的说法,扩展格式中的尾数位数的选择是由二进制十进制转换以及一般指数x y的需求决定的。Palmer / Morse还提到了幂运算,并提供了详细信息:由于幂运算的错误放大特性,使用扩展格式的朴素计算需要在尾数中添加与常规格式的索引中一样多的位,才能提供准确的结果。 。由于双精度使用11个指数位,因此双扩展格式需要64个尾数位。
除了Coonen的博士论文之外,我还检查了在IEEE-754标准发布之前发布的文档草稿,并且找不到以双扩展格式表示的15个指数位的明确理由。
从x87浮点单元的个人设计经验中,我知道基本数学函数的直接实现(没有中间溢出的危险)至少会激发三个额外的指数位。特别地,使用15位可能是硬件设计的产物。8086 CPU使用16位字作为基本构建块,因此在双扩展格式中需要64个尾数位将导致该格式包含80位(= 5个字),为指数保留15位。