8

我对如何确定这些感兴趣:

  1. 单精度有:8 位 e 和其余(23 位)是尾数
  2. 双精度:11 位 e 和其余(52 位)是尾数 ofc 有 1 位符号。

那么如何确定尾数的位数,以及e的位数。我想这是菜鸟问题,但我想知道答案。

4

1 回答 1

3

如果您为自己开发一种格式,那么您可以根据您需要更高的精度或更大的范围来决定指数和尾数的位数。由于 IEEE-754 是为一般用途而设计的,因此他们必须在大多数情况下选择更好的

在 IEEE-754 之前,有许多具有不同优缺点的浮点格式,其中一些来自 DEC。最初,DEC 为其 VAX 系统创建了 32 位 F 和 64 位 D 格式,两者都有 8 位的指数以表示所有重要的物理常数,包括普朗克常数 (6.626070040 × 10 -34 ) 和阿伏伽德罗常数(6.022140857 × 10 23 )。但他们很快意识到这个数字非常有限,并且时不时发生上溢/下溢,因此他们必须在指数上再增加 3 位,以创建新的 64 位 G 格式。当 Kahan 博士撰写 IEEE-754 草案时,他“建议复制 DEC VAX 的浮点,因为它在当时非常好”这就是为什么 IEEE-754 单精度和双精度在指数部分分别有 8 位和 11 位

64 位格式的另一个基本原理是允许重复乘法而不会溢出

对于 64 位格式,主要考虑的是范围;至少,希望任何两个 32 位数字的乘积不应该溢出 64 位格式。指数范围的最终选择提供了八个 32 位项的乘积不会溢出 64 位格式——这对优化编译器的用户来说可能是一个福音,这些编译器从仔细的程序员指定的算术运算序列重新排序。

“二进制浮点算术的提议标准”,David Stephenson,IEEE 计算机,卷。14,第 3 期,1981 年 3 月,第 51-62 页

同理,各种 DSP 都有更宽的累加器寄存器,通常为 40 位,以允许将 32 位值相加 256 次而不会溢出

事实上,如今 IEEE-754 交换格式的规则,指数的大小是round(4 log 2 (k)) - 13位,所以每次我们将类型的宽度加倍时,指数将多出约 4 位允许 16 次较窄类型的乘法而不会溢出

在 16 位半浮点格式中,如果仅使用 4 位作为指数,由于范围太窄并且最大值甚至比最大 16 位 int 值小得多,因此它们使用 5 位来代替。半浮点数主要用于计算机图形,因此可能 11 位的精度就足够了,它们需要更大的指数才能获得更宽的动态范围。

更多详情请阅读IEEE 754 的免费参数从何而来?

于 2015-04-18T08:42:50.693 回答