首页 文章

如何将二进制浮点数转换为小数?

提问于
浏览
4

我被困在家庭作业上;我需要将二进制浮点数转换为小数点 . 我觉得我理解这个过程,但我得不到正确的答案 . 这是我的思考过程 .

我有二进制浮点数: 0 000 101

  • 3位指数字段的偏差为3: 2^(3-1)-1 = 3

  • 尾数变为 1.101 (基数2)

  • 指数位0的值减去指数位的数量3,为-3,因此尾数的小数向左移动3位
    0.001101

  • 在base-10中,即 2^-3 + 2^-4 + 2^-6 ,等于0.203125或13/64 .

但是,13/64不是正确答案,自动评分者不接受它 . 如果我的答案是错的,那么我不明白为什么,我希望有人可以指出我正确的方向 .

凭借纯粹的运气,我猜到了5/32作为答案,并使其正确;我不知道为什么会这样 .

1 回答

  • 4

    在IEEE-754浮点格式中, exponent = 0 is a denormal, where the implied leading bit in the mantissa is 0 .

    维基百科有一篇关于single-precision float (binary32)格式的详细文章,有很多例子 . 对于binary32 float,公式是(来自wiki文章):

    (−1)^signbit × 2^(−126)        × 0.significandbits   ; denormal, expbits=0
    (−1)^signbit × 2^(expbits−127) × 1.significandbits   ; normal
     Inf  or  NaN (depending on mantissa aka significant); expbits = all 1s
    

    (注意,0.0是非正规的特殊情况,但实际上并不被认为是非正规) .

    无论如何,如果指数为零,请注意指数不再是 expbits - bias ,它高一个 .


    回到你的情况:你的尾数是0.101二进制,0.625十进制(我将 0b101 / 8 插入 calc ) .

    2 ^ -2 * 0.101 (二进制)= 2 ^ -2 * 0.625(十进制)= 0.15625 = 5/32


    这是一篇https://en.wikipedia.org/wiki/Minifloat维基百科文章,其中提到了8位IEEE格式,以及计算机图形硬件在现实生活中使用的其他一些不到32位的格式 . (例如24位或16位) . 有趣的事实:x86可以加载/存储16位半精度浮点数的向量,使用F16C ISA extension动态转换为单个寄存器中的单个 .

    另请参见此在线转换器,其中包含以下复选框:https://www.h-schmidt.net/FloatConverter/IEEE754.html

相关问题