Algoritmo di Booth

DamianFox
Ciao a tutti, in questi giorni mi sto preparando per l'esame di Architettura degli Elaboratori.
La mia domanda è questa: qualcuno mi può spiegare come funziona l'algoritmo di Booth e a cosa serve??
Grazie mille!!! :)

Risposte
hamming_burst
Ciao,
da un po' non sentivo parlare dell'algoritmo di Booth :-)
Vado a memoria...

serve per fare le moltiplicazioni in codifica binaria,
è vantaggioso rispetto alla moltiplicazione naive, mi sembra che ricodificando a coppie i bit, riduce le somme da fare. Se ricordo bene c'è una versione "migliorata" che codifica a tre bit, ma è una versione diversa...

Se hai un'esempio su cui non riesci a fare la codifica, perchè alla fine è una cosa automatica, mostralo che ti si da una mano :-)

DamianFox
Per esempio io voglio fare questa moltiplicazione:

10011 * 01011 che corrispondono rispettivamente a -13 e 11. Come faccio a trasformare i numeri con l'algoritmo di booth??

Grazie della disponibilità!

hamming_burst
Prendi tabellina di ricodifica dell'algoritmo di Booth (standard):

00 -> 0
01 -> +1
10 -> -1
11 -> 0

regole di calcolo:
- 0: scrivi 0 per tutta l'estensione del risultato
- +1: ricopi il moltiplicando
- -1: fai il complemento a 2 del moltiplicando

il resto è tutto uguale alla moltiplicazione normale tra due numeri binari (perciò le regole di shift sinistro, somme a coppie e risultato occupa il doppio dei bit, sono validi)

prendi il moltiplicatore: 01011
aggiungi un bit in posizione meno significativa: 010110
poi vai a coppie e ricodifichi:

01 -> +1
10 -> -1
01 -> +1
11 -> 0
10 -> -1

adesso devi moltiplicare:
10011* (+1 -1 +1 0 -1)

utilizzi le regole di calcolo che ti ho scritto sopra e il gioco è fatto, se sei capace di moltiplicare in binario...

se hai dubbi chiedi pure :-)


PS: sono andato un po' a memoria, ma calcolando è corretto quanto detto

DamianFox
Ho capito come trasformare il numero con l'algoritmo di booth, ma non ho capito cosa intendi con "scrivi 0 per tutta l'estensione del risultato";
cioè la somma +1-1+1+0-1 fa 0 quindi moltiplico 10011*0 e poi?

hamming_burst
Ma no...
sono simboli non sono "somme". Diventa una "matrice" da moltiplicare, come un qualsiasi numero binario

01001*
+1-1+1 0-1

Primo passo:
01001*(-1) perciò fai complemento a 2 del numero. Ed estendi il segno...come una moltiplicazione normale.
Secondo passo:
01001*(0) shift a sinistra di una pozione e riporti tutto zero
Terzo passo:
01001*(+1) shift a sinistra di due posizioni e riporti 01001 ed estendi il segno

ecc...
una normale moltiplicazione...

DamianFox
Ho capito!! Grazie!!!




P.S. Però non mi pare che siano di meno le somme da fare, o sbaglio?

hamming_burst
non sempre è vantaggioso, alle volte è uguale ad una normale moltiplicazione.
Dipende dai numeri binari (dal moltiplicatore), un esempio può essere se hai più bit attivi consecutivi, in quel caso avrai molti $0$ dalla codifica come risultato... e perciò molte somme (interne) in meno da fare :-)

DamianFox
Un'ultima domanda:
guardando nella dispensa dell'esercitatore di Architettura ho trovato il paragrafo "Moltiplicazione con metodo bit-pair recoding";
questo metodo usa le triple al posto delle coppie per trasformare il numero, mi potresti spiegare in che modo le usa le triple?
Nella dispensa c'è scritto veramente poco.. :(
Grazie!!

hamming_burst
ah ecco si chiama "bit-pair recoding" l'algoritmo di Booth migliorato, non lo ricordavo :-)

al momento però non ricordo la sua codifica e funzionamento esatto. Ma sicuramente sarà molto simile a quello sopra.
prova a googlare...o al massimo cerco qualcosa dopo... :smt039

hamming_burst
Allora il bit pair recoding è praticamente simile all'algoritmo di booth, come detto.
Tabella di ricodifica:

000 -> 0
001 -> +1
010 -> +1
011 -> +2
100 -> -2
101 -> -1
110 -> -1
111 -> 0

Le uniche modifiche sono:
- +2: shift sinistra sempre di una posizione e ricopio moltiplicando
- -2: shift a sinistra sempre di una posizione e faccio complemento a due
- se serve estendi il segno nella ricodifica con un bit (stesso caso dello zero in posizione meno significativa)

rispetto alla moltiplicazione standard:
- shift a sinistra di due posizioni invece che uno

pui ricodificare anche la codifica fatta con l'algoritmo di Booth

se hai dubbi chiedi pure, ma se hai capito A. di Booth non avrai problemi... :-)

DamianFox
ok, ora è tutto chiaro!!! Grazie!!!

DamianFox
piccolo dubbio: nella codifica di Booth, lo zero che hai aggiunto nella posizione meno significativa va aggiunto sempre??

hamming_burst
da quello che mi ricordo, deve essere sempre messo per "stabilità". Invece in mosizione più significativa (l'estensione del segno) solo "se necessario". :-)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.