提问者:小点点

半精度浮点


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

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

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

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

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

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

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

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

谢谢。


共1个答案

匿名用户

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

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

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

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

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

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

但是舍入误差略优于0.5 ULP(精确地说是0.1000011 ULP),为了最小化它,1.10111000011应该通过在ULP中添加1来舍入4位。

  1.1011 
+      1
= 1.1100

最终代码是0.110.1100