【问题标题】:Floating Point Multiplication浮点乘法
【发布时间】:2014-02-14 14:32:50
【问题描述】:

我遇到了这个问题,我必须解决我必须乘以浮点数(16 位)的位置,但我无法仔细检查它。非常感谢任何帮助。

浮点A:0 11000 0111000000 浮点B:0 11010 1011000000

我计算指数:

答:24-15=9 B:26-15=11

计算尾数(a & b):

(2^9*b) * (2^11*b) = 2^9+11 * (a*b) + 2^20 * (a*b)

溢出,所以我将 A 的指数增加到与 B(11) 一样。

然后我按照计算移动A的尾数:

1.0111 > 0.10111 > 0.010111。

然后我乘以得到尾数。

                    0.010111
                  * 1.101100
                     0000000
                   0000000
                 0010111
               0010111
             0000000
           0010111
         0010111_____
       0.100110110100

我又换档了。

0.100110110100

指数减1,所以是10。

符号为0,所以是正数。

答案:0 01010 00110110100。

对吗?

提前致谢!

【问题讨论】:

  • (2^9*b) * (2^11*b) = 2^9+11 * (a*b) + 2^20 * (a*b) 行无法理解您在做什么。您不需要均衡指数以进行乘法:这是您为对齐 additionsubtraction 的有效数字所做的工作。
  • 在进行此类工作时,我强烈建议获取或编写一个从浮点格式到十进制数的转换器。它使检查变得更加容易。

标签: math floating-point binary multiplication ieee-754


【解决方案1】:

看起来像binary16

对吗?:不。

“尾数”或分数都需要包含一个隐含位,因为它不是最小指数。所以.1011000000 变成了1.1011000000

改为1.01 1100 0000 * 1.10 1100 0000 = 10.0110 1101 0000 0000 0000

除了四舍五入之外,指数的变化是乘法后要考虑的事情。

将乘积 1.0011 0110 1000 0000 0000 0 和 +1 右移到无偏指数 9 + 11 + 1 --> 21。

将乘积四舍五入为 10 个小数位
1.0011 0110 1000 0000 0000 0
1.0011 0110 10

重建结果
符号 0^0 = 0
有偏指数 21 + 15 = 36 = 100100,溢出。 @Yves Daoust
分数 = 0011 0110 10.

溢出通常设置为 INF 0 11111 0000000000 = infinity

还没有仔细检查我的工作。

【讨论】:

    【解决方案2】:

    我看到两个问题:

    • 您没有将隐含的 1 视为尾数的最左边位:1.0111000000 * 1.1011000000,
    • 指数溢出,结果无法表示[如果指数下溢,您可能已经非规范化]。

    【讨论】:

      猜你喜欢
      • 2011-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-14
      相关资源
      最近更新 更多