【问题标题】:How are IEEE-754 single and double precision formats determined?IEEE-754 单精度和双精度格式是如何确定的?
【发布时间】:2014-05-28 16:42:42
【问题描述】:

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

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

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

【问题讨论】:

  • 随意。有一天,一群工程师聚在一起,决定如何最好地表示浮点数。他们提出了这种格式,硬件和软件供应商也采用了这种格式。
  • 实际上是一个很好的问题。 32 位和 64 位的总数是很自然的原因,因为即使在 20 年前,这也是我们预计未来许多年的“自然”大小。对于分布(8 + 23 或 11 + 52),替代方案将是例如 7+24 或 9+22。您赢得了一些精确度并失去了一些范围,或者反过来。有人只需要决定最佳点是什么。
  • @jliv902 有关事情如何发生的更准确描述,请参阅cs.berkeley.edu/~wkahan/ieee754status/754story.html。不幸的是,那篇文章没有涉及将比特归因于不同格式的权衡,但这些当然也经过仔细权衡。
  • 谢谢大家的回答。祝你好运:)。

标签: precision ieee-754 design-decisions design-rationale


【解决方案1】:

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

在 IEEE-754 之前,有许多优缺点各异的浮点格式,其中一些来自 DEC。最初,DEC 为其 VAX 系统创建了 32 位 F 和 64 位 D 格式,两者都有 8 位的指数以表示所有重要的物理常数,包括普朗克常数 (6.626070040 × 10-34 sup>) 和阿伏伽德罗常数 (6.022140857 × 1023)。但他们很快意识到这个数字非常有限,并且时不时发生上溢/下溢,因此他们必须在指数上再增加 3 位,以创建新的 64 位 G 格式。当 Kahan 博士编写 IEEE-754 草案时,他 "suggested that DEC VAX's floating-point be copied because it was very good for its time" 这就是为什么 IEEE-754 单精度和双精度在指数部分分别有 8 位和 11 位

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

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

"A Proposed Standard for Binary Floating-Point Arithmetic",大卫斯蒂芬森,IEEE 计算机,卷。 14,第 3 期,1981 年 3 月,第 51-62 页

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

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

在 16 位半浮点格式中,如果只使用 4 位作为指数,范围会太窄,最大值甚至比最大 16 位 int 值小得多,所以他们使用 5 位代替.半浮点数主要用在计算机图形中,所以大概 11 位的精度就足够了,它们需要更大的指数才能获得更宽的动态范围。

更多详情请阅读Where did the free parameters of IEEE 754 come from?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-24
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    相关资源
    最近更新 更多