我对半精度IEEE-754有一个小问题。
1)我进行以下练习: 13,7625应以16位(半精度)写
所以我开始将数字从DEC转换为Binary,我明白了 13,7625 = 1101.1100001100 2
总共是1.1011100001100 *2³。
我的教授给了我们解决方案,据我所知我对尾数做得很正确,而且对于指数也是如此,但是对于指数来说,他说是19 = 10011,但我不明白。 bais可以是16吗?根据维基百科 -半精度为15。 -单精度为127。 -双精度1032。
您能指出我做错了什么吗?。
2)另一个问题是,如果存在以下情况,指数偏差将是什么: 1个符号位+ 4个尾数位+ 3个指数位。 为什么呢?
谢谢。
答案 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