fbpx
维基百科

布斯乘法算法

布斯乘法算法(英語:Booth's multiplication algorithm)是计算机中一种利用数的2的补码形式来计算乘法的算法。该算法由安德鲁·唐纳德·布思于1950年发明,当时他在伦敦大学柏贝克学院晶体学研究。布斯曾使用过一种台式计算器,由于用这种计算器来做移位计算比加法快,他发明了该算法来加快计算速度。布斯算法在计算机体系结构学科中备受关注。

算法描述 编辑

对于N位乘数Y,布斯算法检查其2的补码形式的最后一位和一个隐含的低位,命名为y-1,初始值为0。对于yi, i = 0, 1, ..., N - 1,考察yiyi - 1。当这两位相同时,存放积的累加器P的值保持不变。当yi = 0且yi - 1 = 1时,被乘数乘以2i加到P中。当yi = 1且yi - 1 = 0时,从P中减去被乘数乘以2i的值。算法结束后,P中的数即为乘法结果。

该算法对被乘数和积这两个数的表达方式并没有作规定。一般地,和乘数一样,可以采用2的补码方式表达。也可以采用其他计数形式,只要支持加减法就行。这个算法从乘数的最低位执行到最高位,从i = 0开始,接下来和2i的乘法被累加器P的算术右移所取代。较低位可以被移出,加减法可以只在P的前N位上进行。[1]

典型实现 编辑

布斯算法的实现,可以通过重复地在P上加两个预设值A S 其中的一个,然后对P实施算术右移。设mr分别为被乘数和乘数,再令xy分别为mr中的数字位数。

  1. 确定AS的值,以及P的初始值。这三个数字的长度都应等于(x + y + 1):
    1. 对于A,以m的值填充前x位(最靠左的位),用零填满剩下的(y + 1)位;
    2. 对于S,以( - m)的值填充前x位,用零填满剩下的(y + 1)位;
    3. 对于P:用0填满最左的x位,将r的值附加在尾部;最右一位用零占位(辅助位,当i=0时i-1=-1,指的就是这个辅助位);
  2. 考察P的最右两位:
    1. 如果等于01,求出P + A的值,忽略上溢;
    2. 如果等于10,求出P + S的值,忽略上溢;
    3. 如果等于00,不做任何运算,在下一步中直接采用P的值;
    4. 如果等于11,不做任何运算,在下一步中直接采用P的值。
  3. 对第2步中得到的值进行算术右移一位,并将结果赋给P
  4. 重复第2步和第3步,一共做y次;
  5. 舍掉P的最右一位,得到的即为mr的积。

换另一种说法:把前x位用一个单独的数R0表示,中间y位用另一个数表示R1表示,辅助位用Z表示 在这里,要通过重复的把R0加上或者减去m来得到结果。具体如下: 初始值R0=0,R1=r.Z=0,此时来考查yi和yi-1这两位,在这里就是r的最后一位和Z的值。这里要说下为什么每次看的都是这两位了。在下边每次运算后都会把R0,R1,Z中的值右移一次,RO的最后一位移入R1的高位,R1的最后一位移入Z。这里要注意的是在右移R0时,如果他的最高位是1,则移位后最高位用1填充,如果最高位是0,移位后最高位用0填充。接下来要按r的最后一位和Z的值来判断怎么加减了:

    1. 如果为01,则R0+m,进位忽略。然后R0,R1,Z右移一位,再下一步判断,直到把R1的每一位都判断过后为结束
    2. 如果为10,则R0-m,借位忽略(只要x位的R0的值)。然后R0,R1,Z右移一位,再下一步判断,直到把R1的每一位都判断过后为结束
    3. 如果为00或是11,则R0的值保持不变。然后R0,R1,Z右移一位,再下一步判断,直到把R1的每一位都判断过后为结束

最后是结果,结果就是R0并上R1的值。比如R0=3,R1=25,结果就是325.

算法原理 编辑

考虑一个由若干个0包围着若干个1的正的二进制乘数,比如00111110,积可以表达为:

 

其中,M代表被乘数。变形为下式可以使运算次数可以减为两次:

 

事实上,任何二进制数中连续的1可以被分解为两个二进制数之差:

 

因此,我们可以用更简单的运算来替换原数中连续为1的数字的乘法,通过加上乘数,对部分积进行移位运算,最后再将之从乘数中减去。它利用了我们在针对为零的位做乘法时,不需要做其他运算,只需移位这一特点,这很像我们在做和99的乘法时利用99 = 100 − 1这一性质。这种模式可以扩展应用于任何一串数字中连续为1的部分(包括只有一个1的情况)。那么,

 
 

布斯算法遵从这种模式,它在遇到一串数字中的第一组从0到1的变化时(即遇到01时)执行加法,在遇到这一串连续1的尾部时(即遇到10时)执行减法。这在乘数为负时同样有效。当乘数中的连续1比较多时(形成比较长的1串时),布斯算法较一般的乘法算法执行的加减法运算少。

参考来源 编辑

  1. ^ Chi-hau Chen. Signal processing handbook. CRC Press. 1988: 234. ISBN 9780824779566. 

延伸阅读 编辑

  1. Andrew D. Booth. A signed binary multiplication technique. The Quarterly Journal of Mechanics and Applied Mathematics, Volume IV, Pt. 2 [1] (页面存档备份,存于互联网档案馆
  2. Collin, Andrew. Andrew Booth's Computers at Birkbeck College (页面存档备份,存于互联网档案馆). Resurrection, Issue 5, Spring 1993. London: Computer Conservation Society.
  3. Patterson, David and John Hennessy. Computer Organization and Design: The Hardware/Software Interface, Second Edition. ISBN 1-55860-428-6. San Francisco, California: Morgan Kaufmann Publishers. 1998.
  4. Stallings, William. Computer Organization and Architecture: Designing for performance, Fifth Edition. ISBN 0-13-081294-3. New Jersey: Prentice-Hall, Inc.. 2000.

外部链接 编辑

布斯乘法算法, 英語, booth, multiplication, algorithm, 是计算机中一种利用数的2的补码形式来计算乘法的算法, 该算法由安德鲁, 唐纳德, 布思于1950年发明, 当时他在伦敦大学柏贝克学院做晶体学研究, 布斯曾使用过一种台式计算器, 由于用这种计算器来做移位计算比加法快, 他发明了该算法来加快计算速度, 布斯算法在计算机体系结构学科中备受关注, 目录, 算法描述, 典型实现, 算法原理, 参考来源, 延伸阅读, 外部链接算法描述, 编辑对于n位乘数y, 布斯算法检查其2的补码形式. 布斯乘法算法 英語 Booth s multiplication algorithm 是计算机中一种利用数的2的补码形式来计算乘法的算法 该算法由安德鲁 唐纳德 布思于1950年发明 当时他在伦敦大学柏贝克学院做晶体学研究 布斯曾使用过一种台式计算器 由于用这种计算器来做移位计算比加法快 他发明了该算法来加快计算速度 布斯算法在计算机体系结构学科中备受关注 目录 1 算法描述 2 典型实现 3 算法原理 4 参考来源 5 延伸阅读 6 外部链接算法描述 编辑对于N位乘数Y 布斯算法检查其2的补码形式的最后一位和一个隐含的低位 命名为y 1 初始值为0 对于yi i 0 1 N 1 考察yi和yi 1 当这两位相同时 存放积的累加器P的值保持不变 当yi 0且yi 1 1时 被乘数乘以2i加到P中 当yi 1且yi 1 0时 从P中减去被乘数乘以2i的值 算法结束后 P中的数即为乘法结果 该算法对被乘数和积这两个数的表达方式并没有作规定 一般地 和乘数一样 可以采用2的补码方式表达 也可以采用其他计数形式 只要支持加减法就行 这个算法从乘数的最低位执行到最高位 从i 0开始 接下来和2i的乘法被累加器P的算术右移所取代 较低位可以被移出 加减法可以只在P的前N位上进行 1 典型实现 编辑布斯算法的实现 可以通过重复地在P上加两个预设值A和 S其中的一个 然后对P实施算术右移 设m和r分别为被乘数和乘数 再令x和y分别为m和r中的数字位数 确定A和S的值 以及P的初始值 这三个数字的长度都应等于 x y 1 对于A 以m的值填充前x位 最靠左的位 用零填满剩下的 y 1 位 对于S 以 m 的值填充前x位 用零填满剩下的 y 1 位 对于P 用0填满最左的x位 将r的值附加在尾部 最右一位用零占位 辅助位 当i 0时i 1 1 指的就是这个辅助位 考察P的最右两位 如果等于01 求出P A的值 忽略上溢 如果等于10 求出P S的值 忽略上溢 如果等于00 不做任何运算 在下一步中直接采用P的值 如果等于11 不做任何运算 在下一步中直接采用P的值 对第2步中得到的值进行算术右移一位 并将结果赋给P 重复第2步和第3步 一共做y次 舍掉P的最右一位 得到的即为m和r的积 换另一种说法 把前x位用一个单独的数R0表示 中间y位用另一个数表示R1表示 辅助位用Z表示 在这里 要通过重复的把R0加上或者减去m来得到结果 具体如下 初始值R0 0 R1 r Z 0 此时来考查yi和yi 1这两位 在这里就是r的最后一位和Z的值 这里要说下为什么每次看的都是这两位了 在下边每次运算后都会把R0 R1 Z中的值右移一次 RO的最后一位移入R1的高位 R1的最后一位移入Z 这里要注意的是在右移R0时 如果他的最高位是1 则移位后最高位用1填充 如果最高位是0 移位后最高位用0填充 接下来要按r的最后一位和Z的值来判断怎么加减了 如果为01 则R0 m 进位忽略 然后R0 R1 Z右移一位 再下一步判断 直到把R1的每一位都判断过后为结束 如果为10 则R0 m 借位忽略 只要x位的R0的值 然后R0 R1 Z右移一位 再下一步判断 直到把R1的每一位都判断过后为结束 如果为00或是11 则R0的值保持不变 然后R0 R1 Z右移一位 再下一步判断 直到把R1的每一位都判断过后为结束最后是结果 结果就是R0并上R1的值 比如R0 3 R1 25 结果就是325 算法原理 编辑考虑一个由若干个0包围着若干个1的正的二进制乘数 比如00111110 积可以表达为 M 0 0 1 1 1 1 1 0 M 2 5 2 4 2 3 2 2 2 1 M 62 displaystyle M times prime prime 0 0 1 1 1 1 1 0 prime prime M times 2 5 2 4 2 3 2 2 2 1 M times 62 nbsp 其中 M代表被乘数 变形为下式可以使运算次数可以减为两次 M 0 1 0 0 0 0 1 0 M 2 6 2 1 M 62 displaystyle M times prime prime 0 1 0 0 0 0 mbox 1 0 prime prime M times 2 6 2 1 M times 62 nbsp 事实上 任何二进制数中连续的1可以被分解为两个二进制数之差 0 1 1 n 0 2 1 0 0 n 0 2 0 0 1 n 0 2 displaystyle ldots 0 overbrace 1 ldots 1 n 0 ldots 2 equiv ldots 1 overbrace 0 ldots 0 n 0 ldots 2 ldots 0 overbrace 0 ldots 1 n 0 ldots 2 nbsp 因此 我们可以用更简单的运算来替换原数中连续为1的数字的乘法 通过加上乘数 对部分积进行移位运算 最后再将之从乘数中减去 它利用了我们在针对为零的位做乘法时 不需要做其他运算 只需移位这一特点 这很像我们在做和99的乘法时利用99 100 1这一性质 这种模式可以扩展应用于任何一串数字中连续为1的部分 包括只有一个1的情况 那么 M 0 0 1 1 1 0 1 0 M 2 5 2 4 2 3 2 1 M 58 displaystyle M times prime prime 0 0 1 1 1 0 1 0 prime prime M times 2 5 2 4 2 3 2 1 M times 58 nbsp M 0 1 0 0 1 0 1 0 M 2 6 2 3 2 1 M 58 displaystyle M times prime prime 0 1 0 0 mbox 1 0 1 0 prime prime M times 2 6 2 3 2 1 M times 58 nbsp 布斯算法遵从这种模式 它在遇到一串数字中的第一组从0到1的变化时 即遇到01时 执行加法 在遇到这一串连续1的尾部时 即遇到10时 执行减法 这在乘数为负时同样有效 当乘数中的连续1比较多时 形成比较长的1串时 布斯算法较一般的乘法算法执行的加减法运算少 参考来源 编辑 Chi hau Chen Signal processing handbook CRC Press 1988 234 ISBN 9780824779566 延伸阅读 编辑Andrew D Booth A signed binary multiplication technique The Quarterly Journal of Mechanics and Applied Mathematics Volume IV Pt 2 1 页面存档备份 存于互联网档案馆 Collin Andrew Andrew Booth s Computers at Birkbeck College 页面存档备份 存于互联网档案馆 Resurrection Issue 5 Spring 1993 London Computer Conservation Society Patterson David and John Hennessy Computer Organization and Design The Hardware Software Interface Second Edition ISBN 1 55860 428 6 San Francisco California Morgan Kaufmann Publishers 1998 Stallings William Computer Organization and Architecture Designing for performance Fifth Edition ISBN 0 13 081294 3 New Jersey Prentice Hall Inc 2000 外部链接 编辑Radix 4 Booth Encoding 页面存档备份 存于互联网档案馆 Radix 8 Booth Encoding in A Formal Theory of RTL and Computer Arithmetic Booth s Algorithm Booth s Algorithm JavaScript Simulator 页面存档备份 存于互联网档案馆 Implementation in Verilog Implementation in Python 页面存档备份 存于互联网档案馆 布斯算法 带符号的二进制乘法 永久失效連結 取自 https zh wikipedia org w index php title 布斯乘法算法 amp oldid 74532850, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。