半精度浮点

时间:2019-06-29 00:15:35

标签: binary ieee-754 ieee half-precision-float

我对半精度IEEE-754有一个小问题。

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

所以我开始将数字从DEC转换为Binary,我明白了 13,7625 = 1101.1100001100 2

总共是1.1011100001100 *2³。

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

我的教授给了我们解决方案,据我所知我对尾数做得很正确,而且对于指数也是如此,但是对于指数来说,他说是19 = 10011,但我不明白。 bais可以是16吗?根据维基百科  -半精度为15。  -单精度为127。  -双精度1032。

您能指出我做错了什么吗?。

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

谢谢。

1 个答案:

答案 0 :(得分:0)

  

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

     

所以我开始将数字从DEC转换为Binary,我得到了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进行四舍五入。

  1.1011 
+      1
= 1.1100

,最终代码为0.110.1100