【问题标题】:Half-precision floating-point半精度浮点
【发布时间】:2019-11-10 20:16:16
【问题描述】:

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

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

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

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

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

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

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

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

    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 位编码,则偏差为 2n-1-1。这适用于简单精度(8b/bias 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),为了将其最小化,应通过在 ULP 上加 1 将 1.10111000011 舍入为 4 位。

      1.1011 
    +      1
    = 1.1100
    

    最终代码为 0.110.1100

    【讨论】:

    • 感谢您的回答,但第二个问题与第一个无关。我不需要四舍五入,因为教授没有要求我们将答案/四舍五入为 8 位。难道是教授弄错了,告诉我们真正的答案是指数是19=10011?感谢您的解释。它是在线讲座pdf中写的,所以我猜她犯了一个错误。关于 19 件事!。
    • 您能否向我解释一下这个练习的结果:教授给了我们这个练习4,625=100.101=1.00101*2²,然后她写了exponent=110 ,请向我解释一下这位教授在做什么?我开始认为她只是写了多余的数字而没有添加或减去(在需要时)偏差。
    • 我也认为你是对的。在 minifloat 8 位中,指数应该是 3+2=5 而不是 6。但这可能只是一个粗心的错误。直接问她。
    猜你喜欢
    • 2020-02-03
    • 1970-01-01
    • 2016-08-17
    • 2011-09-03
    • 2011-10-14
    • 2011-11-17
    • 2013-04-16
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多