我的 Booth 的乘法手写处理有什么问题?

问题描述 投票:0回答:0

我尝试使用 Booth 的乘法算法将 5,793(0001 0110 1010 0001) 乘以 -26,975(1001 0110 1010 0001),但手写计算的结果与我的测试计算结果相差一位数。我又试了几次,检查了好几次,都找不到错误。

不知是不是我做Booth's Multiplication的时候还是概念错误,所以才报错

最后附上自己的计算过程,希望有好心人帮忙解决,感恩之心!

我的手写计算图: https://drive.google.com/file/d/1mnE7NU6tFQUJBeeTRE8EfMQOLU26JnN-/view?usp=sharing

参考:

https://en.wikipedia.org/wiki/Booth%27s_multiplication_algorithm#:~:text=Booth's%20multiplication%20algorithm%20is%20a,Birkbeck%20College%20in%20Bloomsbury%2C%20London.

找出在哪里可以找到我的错误。

C = 0001 0110 1010 0001 (5,793), -C = 1110 1001 0101 1111
D = 1001 0110 1010 0001 (-26,975)
C x D = ?

Step                Product                   Next
  0    0000000000000000 1001011010100001 0  10 -> sub
      +1110100101011111
       1110100101011111 1001011010100001

  1    1111010010101111 1100101101010000 1  01 -> add
      +0001011010100001
       0000101101010000 1100101101010000

  2    0000010110101000 0110010110101000 0  00 -> shift
  3    0000001011010100 0011001011010100 0  00 -> shift
  4    0000000101101010 0001100101101010 0  00 -> shift

  5    0000000010110101 0000110010110101 0  10 -> sub
      +1110100101011111
       1110101000010100 0000110010110101

  6    1111010100001010 0000011001011010 1  01 -> add
      +0001011010100001
       0000101110101011 0000011001011010

  7    0000010111010101 1000001100101101 0  10 -> sub
      +1110100101011111
       1110101100110100 1000001100101101

  8    1111010110011010 0100000110010110 1  01 -> add
      +0001011010100001
       0000110000111011 0100000110010110

  9    0000011000011101 1010000011001011 0  10 -> sub
      +1110100101011111
       1110111101111100 1010000011001011

 10    1111011110111110 0101000001100101 1  11 -> shift

 11    1111101111011111 0010100000110010 1  01 -> add
      +0001011010100001
       0001001010000000 0010100000110010

 12    0000100101000000 0001010000011001 0  10 -> sub
      +1110100101011111
       1111001010011111 0001010000011001

 13    1111100101001111 1000101000001100 1  01 -> add
      +0001011010100001
       0000111111110000 1000101000001100

 14    0000011111111000 0100010100000110 0  00 -> shift

 15    0000001111111100 0010001010000011 0  10 -> sub
      +1110100101011111
       1110110101011011 0010001010000011

 16    1111011010101101 1001000101000001 done

 CxD = 11110110101011011001000101000001
 CxD = 11110110101011111001000101000001 (test)
algorithm computer-science
© www.soinside.com 2019 - 2024. All rights reserved.