浮点乘法

时间:2014-01-23 20:16:33

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

我遇到了这个问题,我必须解决我必须乘以浮点数(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.00110110100

将指数减1,所以它是10.

符号为0,所以它是正数。

答案:0 01010 00110110100。

这是对的吗?

提前致谢!

2 个答案:

答案 0 :(得分:0)

看起来像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

还没有加倍检查我的工作。

答案 1 :(得分:0)

我看到两个问题:

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