Butov algoritam služi za množenje dva neoznačena binarna broja zapisana u komplementu dvojke. Algoritam je izmislio Endru Donald But 1950. godine, dok je vršio istraživanje o kristalografiji (vidi još kristalografija) na Birkbek koledžu u Londonu. But je koristio kalkulatore koji su bili brži u pomeranju (Šiftovanju) cifara nego u njihovom sabiranju i iz tog razloga je osmislio algoritam koji će povećati brzinu sabiranja. Butov algoritam ima veliki doprinos arhitekturi računara.[1]

Algoritam uredi

Butov algoritam se sastoji od množioca i množenika koji su smešteni u Q i M registre. Takođe postoji i 1-bitni registar koji je smešten logički desno od najmanje značajnog bita (Q0) registra Q i označen je kao Q-1; Njegovu upotrebu ćemo uskoro objasniti. Rezultati množenja će se pojaviti u registrima A i Q. A i Q-1 se inicijalizuju na 0. Upravljačka logika skenira bitove množioca, po jedan istovremeno. Sada, kako se svaki bit ispituje, to se radi i sa bitovima na njegovoj desnoj strani. Ako su dva bita ista (1-1 ili 0-0), onda se svi bitovi registra A, Q i Q-1 pomeraju udesno za jedan bit. Ako se dva bita razlikuju, onda se množenik dodaje registru A, ili od njega oduzima, zavisno od toga da li su dva bita 0-1 ili 1-0. Iza sabiranja ili oduzimanja, dolazi do pomeranja. U oba slučaja, pomeranje udesno je takvo da se bit u registru A krajnje levo, An-1, ne pomera samo u An-2, nego ostaje i u An-1. To se zahteva da bi se sačuvao predznak broja u A i Q. To je poznato kao aritmetičko pomeranje zato što zadržava bit predznaka.

Na slici 1 prikazana je sekvenca događaja u Butovom algoritmu za množenje 7 puta 3. Ista operacija je kompaktnije prikazana na slici 1.2a.

A Q Q-1 M Početne vrednosti
0000 0011 0 0111
1001 0011 0 0111 A → A-M
1100 1001 1 0111 Pomeranje - Kraj prvog ciklusa.
1110 0100 1 0111 Pomeranje - Kraj drugog ciklusa.
0101 0100 1 0111 A → A+M
0010 1010 0 0111 Pomeranje - Kraj trećeg ciklusa.
0001 0101 0 0111 Pomeranje - Kraj četvrtog ciklusa

Slika 1.

Ostatak slike 1.2 daje druge primere algoritma. Kao što se može videti, on radi u bilo kojoj kombinaciji pozitivnih i negativnih brojeva. Zapazite i efikasnost algoritma. Blokovi cifara 1 ili 0 se preskaču, sa prosečno samo jednim sabiranjem ili oduzimanjenjm po bloku.

a) 7 x 3 = 21 (b) 7 x (-3)=(-21)
0111 0111
x 0011 (0) x 1101 (0)
11111001 1-0 11111001 1-0
0000000 1-1 0000111 0-1
000111 0-1 111001 1-0
00010101 (21) 00010101 (-21)

Slika 1.2

Zašto radi Butov algoritam? Najpre razmotrite slučaj pozitivnog množioca. Posebno razmotrite pozitivan množilac koj se sastoji od jednog bloka cifara 1, okruženog ciframa 0 (na primer, 00011110). Kao što name je poznato, množenje može da se postigne sabiranjem odgovarajuće pomerenih kopija množenika.

M x (00011110) = M x (24+23+21) = M x (16+ 8+ 4+ 2)= M x 30;

Broj takvih operacija može da se smanji na dve ako zapazimo da je:

2n+2n-1 + . . . +2n-k = 2n+1 - 2n-k jednačina (1.1)

Tako proizvod može da se napravi jednim sabiranjem i jednim oduzimanjem množenika. Ta šema se proširuje na bilo koji broj blokova cifara 1 u množiocu, uključujući i slučaj kada se sa jednom cifrom 1 postupa kao sa blokom.

M x (01111010) = M x (26+25+24+23+21) = M x (27-23+22-21)
M x (00011110) = M x (25 - 21) = M x (32 - 2) = M x 30

Butov algoritam se povinuje toj šemi izvođenjem operacije oduzimanja kada se naiđe na prvu cifru 1 bloka (1-0) i operaciju sabiranja kada se naiđe na kraj bloka (0-1). Da bismo pokazali da ista šema radi za negativan množilac, treba da posmatramo sledeće. Neka je H negativan broj u notaciji komplementa dvojke:

Predstavljanje = {1 xn-2, xn-3, … , x1, x0} Onda vrednost H može da se izrazi na sledeći način:

X = -2n-1+(xn-2 * 2n-2 )+(xn-3 * 2n-3 )+⋯+(x1* 21 )+(x0* 20) jednačina (1.2)

Bit krajnje levo u X je 1 zato što je X negativan. Pretpostavite da je krajnja leva cifra 0 na k-toj poziciji. Prema tome, X je u obliku Predstavljanje X = {111…10xk-3 xk-2… x1 x0} (1.3) Onda je vrednost H

X=-2n-1+2n-2+⋯+2k+1+(xk-1 X 2k-1) )+⋯+(x0 X 20) jednačina (1.4)

Iz jednačine (1.1), možemo da kažemo da je:

2n-2+2n-3+ . . . +2k+1)= 2n-1 - 2k+1

Preuređujući, dobijamo:

-2n-1+2n-2 + . . . +2k+1 = -2k+1 jednačina (1.5)

Smenjujučći jednačinu (1.5) u (1.4), imamo :

X = -2k+1+(xk-1 * 2k-1) )+...+(x0*20) jednačina (1.6)

Najzad možemo da se vratimo Butovom algoritmu. Pamteći predstavljanje H [jednačina (1.3)], jasno je da se sa svim bitovima od x0 do cifre 0 krajnje levo postupa ispravno zato što oni proizvode sve članove u jednačini (1.6) sem (-2k+1) i zato su u pravilnom obliku. Kada algoritam skenira preko 0 krajnje levo i naiđe na sledeću cifru 1(2k+1), dolazi do prelaza 1-0 i dešava se oduzimanje (-2k+1). To je preostali član u jednačini (1.6).

Primer uredi

Kao primer uzećemo množenje nekog množenika sa brojem (-6). U predstavljanju pomoću komplementa dvojke, koristeći 8-bitnu reč, (-6) se predstavlja kao 11111010.

-6 =-27+26+25+24+23+21

Ovo činilac može lako proveriti. Pa prema tome,

M x (11111010) = M x (-27+26+25+24+23+21)

Kada upotrebimo jednu od jednačina dobijamo sledeće:

M x (11111010) = M x (-23+21)

Činilac takođe može i ovo da proveri, i dalje je M x (-6). Najzad, sledi prethodno zaključivanje.

M x (11111010) = M x (-23+22-21).

Možemo videti da se Butov algoritam povinuje toj šemi. On izvodi oduzimanje kada se naiđe na prvu cifru 1 (10), sabiranje kada se naiđe na (01) i najzad još jednom oduzimanje kada se naiđe na prvu cifru 1 sledećeg bloka.

Prema tome, Butov algoritam izvodi manje sabiranja i oduzimanja nego neki direktiniji algoritam.

Kako algoritam radi uredi

Uzmimo da je množilac pozitivan, i da se sastoji od bloka jedinica, okruženih nulama, kao što je 00111110. Dobijamo proizvod:

 

Gde je M-množenik. Broj operacija može biti dvostruko manji ako napišemo ovako:

 

U stvari, bilo koji blok jedinica u binarnom broju možemo napisati kao razliku dva binarna broja.

 

Dakle, mi zapravo menjamo množenje nizom jedinica u originalnom broju, nekim prostijim operacijama, onda dodajemo množilac, pa pomeramo (šiftujemo) delimični proizvod koji je formiran na odgovarajućim mestima i na kraju oduzimamo množilac. Stoga mi samo pomeramo (šiftujemo) cifre u binarnom množiocu. Ova šema se može proširiti na bilo koji broj blokova jedinica u množiocu (uključujući i slučaj jedne u bloku 1). Prema tome,

 
 

Butov algoritam sledi ovu šemu i tako izvršava sabiranje kada naiđe na prve dve cifre u bloku (0 1) i oduzimanje kada naiđe kraj bloka (1 0). Takođe ovo radi za negativan koeficijent. Kada su oni u množiocu grupisani u duge blokove, Butov algoritam obavlja manje sabiranja i oduzimanja od normalnog algoritma množenja.

Reference uredi

  1. ^ William Stallings Autorizovan prevod sa engleskog jezika devetog izdanja knjige "Computer Organization and Architecture Designing for Performance ninth edition".

Literatura uredi

  • Andrew D. Booth. A signed binary multiplication technique. The Quarterly Journal of Mechanics and Applied Mathematics, Volume IV, Pt. 2, 1951 [1]
  • Collin, Andrew. Andrew Booth's Computers at Birkbeck College Архивирано на сајту Wayback Machine (25. фебруар 2021). 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 978-1-55860-428-5. San Francisco, California: Morgan Kaufmann Publishers. 1998.

Sponjašnje Veze uredi