0

我有一个关于半精度 IEEE-754 的小问题。

1)我有以下练习: 13,7625 应该写成 16 位(半精度)

所以我开始将数字从 DEC 转换为二进制,我得到了 13,7625 = 1101.1100001100 2

总而言之,它将是 1.1011100001100 * 2³。

  • 符号位为 0,因为数字是正数。
  • 尾数应有十位 = 101 110 0001
  • 指数有 5 位 =bias(15) + 3 = 18 因此指数是 10010,这是该死的问题。

我的教授给了我们解决方案,据我所知,我做了非常正确的尾数和二进制转换,但对于指数,他说它是 19=10011,但我不明白。bais可以是16吗?根据维基百科,它的 - 15 为半精度。- 127 为单精度。- 双精度为 1032。

你能指出我做错了什么吗?

2)如果我们有以下情况,另一个问题是指数偏差:1个符号位+ 4个尾数位+ 3个指数位。为什么?

谢谢。

4

1 回答 1

0

1)我有以下练习: 13,7625 应该写成 16 位(半精度)

所以我开始将数字从 DEC 转换为二进制,我得到了这个 13,7625 = 1101.11000011002

你的尾数转换是正确的,你的指数也是如此。半精度的指数偏差为 15 https://en.wikipedia.org/wiki/Half-precision_floating-point_format

另一个问题是,如果我们有以下情况,那么指数偏差是多少:1 个符号位 + 4 个尾数位 + 3 个指数位。为什么?

IEEE-754 FP 编码的规则是,如果指数用 n 位编码,则偏差为 2 n-1 -1。这适用于简单精度(8b/bias 2 7 -1=127)、双精度(11b/2 10 -1=1023 偏差(而不是 1032,有一个小错字))等。
对于指数字段3 位,这给出了 2 2 -1=3的偏差

对于您的编码问题,这将给出 3+3=6=110 的指数代码。对于尾数,它取决于舍入策略。如果尾数向 0 舍入,我们可以通过删除尾随位来编码 1.1011(100001100),最终编码为
0.110.1011。

但舍入误差略高于 0.5 ULP(精确为 0.1000011 ULP),为了将其最小化,应通过在 ULP 上加 1 将 1.10111000011 舍入为 4 位。

  1.1011 
+      1
= 1.1100

最终代码为 0.110.1100

于 2019-06-29T00:49:16.750 回答