我有一个关于半精度IEEE-754的小问题。
1)我有以下练习:13,7625应写成16位(半精度)
所以我开始将数字从DEC转换为二进制,得到这个13,7625=1101.11000011002
总而言之,它将是1。1011100001100*2³。
我的教授给了我们解决方案,正如我所知,我做的尾数非常正确,二进制转换也是如此,但是对于指数,他说它是19=10011,但是我不明白。bais可以是16吗?根据维基百科,它的-15代表半精度。-127代表单精度。-1032代表双精度。
你能指出我做错了什么吗?
2)另一个问题,如果我们有以下情况,指数偏差是什么:1符号位4尾数位3指数位。为什么?
谢谢。
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