ělení INP 28 FIT VUT v Brně
ělení čísel s pevnou řádovou čárkou Nejdříve se budeme zabývat dělením čísel s pevnou řádovou čárkou bez znaménka. Pro jednotlivé činitele operace dělení zavedeme symboly d Q q i R i dělenec dělitel podíl i-tý bit podílu i-tý (průběžný) zbytek Máme tedy vypočítat Q, R tak, aby byla splněna rovnice = Q.d + R, R < d. Pro d, Q, R máme k dispozici n bitů, pro vyhradíme 2n bitů. Nejdříve si ukážeme dělení čísel bez znamének, resp. dělení jejich absolutních hodnot. 2
Příklad 38:5 V kroku i se pokoušíme odečíst od průběžného zbytku R i posunutý dělitel 2 -i d = d= (n=3, 2n=6) Q= qn q = q3 q2 q q Ri+= Ri - qn-i2 -i d =. 2. 3. 4. i= R= 2 -i d > Ri => qn-i= q3 = - q32 d (5.) i= R 2 -i d < Ri => qn-i = q2 = - q22 - d i=2 R2 2 -i d < Ri => qn-i = q = - q2-2 d i=3 R3 2 -i d < Ri => qn-i = q = - q2-3 d R=R4 3
Postup rozhodování při dělení Při rozhodování o hodnotě bitu podílu q n-i jsme postupovali podle vztahů: je-li 2 -i d menší než R i, pak q n-i =, je-li 2 -i d větší než R i, pak q n-i = ------------------------------------------------------------------------------------------------------- Tedy Q = q 3 q 2 q q =. Nový zbytek se vypočte: R i+ := R i - q n-i 2 -i d V praxi se posouvá dílčí/průběžný zbytek vlevo, d je v pevné poloze, takže R i+ := 2R i - q n-i d 4
ělení modifikovaný postup (Praxe: posuv Ri vlevo, d v pevné poloze) = d= (n=3, 2n=6) Q= qn q = q3 q2 q q = Ri+= 2Ri - qn-id i= 2R= d > 2R => Q= - q3d i= R x 2R d < 2R => Q= - q2d i=2 x R2 xx 2R2 d < 2R2 => Q= - qd i=3 xxx R3 xxxx 2R3 d < 2R3 => Q= - qd xxxx R4 =2 4 R => R = 2-4 R4 5
Pravidlo pro určení q n-i Pravidlo pro určení q n-i : když d je větší než 2R i, pak q n-i = jinak q n-i = ---------------------------------------------------- V praxi se porovnávání čísel založené na použití komparátorů nepoužívá. Odečtení se provede (zkusmo), tedy když 2R i - d je menší než, pak q n-i = jinak q n-i = ----------------------------------------------------------- 6
va postupy dělení Máme k dispozici dva hlavní algoritmy dělení: a) Je-li q n-i =, je výsledek "zkušebního" odečtení R i+ = 2R i - d, správný zbytek má být R i+ = 2R i. Správný zbytek dostaneme opravou přičtením +d, což nazýváme restaurací nezáporného zbytku (návrat k nezápornému zbytku), tedy R i+ := R i+ + d. Je-li pravděpodobnost výskytu jedničky v podílu Q rovna p(q n-i = ) = /2, potřebujeme pro n odečtení v průměru ještě n/2 krát přičítat. Grafické znázornění dělení s restaurací nezáporného zbytku je na následujícím obrázku. b) Postup bez restaurace nezáporného zbytku (bez návratu k nezápornému zbytku). Restaurací provádíme operaci R i := R i + d. V dalším kroku po odečtení d dostaneme R i+ := 2R i - d () nebo po přičtení d R i+ := 2R i + 2d - d = 2R i + d (2) Vidíme, že můžeme postupovat podle rovnic (), (2): když q n-i = (R i větší než ), použijeme vztah (), když q n-i =, použijeme vztah (2). Postup je úspornější, protože v každém kroku pak jen přičítáme d, nebo odčítáme d, nikdy neprovádíme obě operace. Při dělení bez restaurace tedy provedeme n aritmetických operací (+ nebo -), pro dělení s restaurací 3/2 n operací. 7
Grafické znázornění dělení s restaurací r 5 -d +d r 2 r -d +d r 3 r 4 x2 2r 2 x2 -d x2 x2 2r 4 -d 2r 2r 3 -d t konverguje k nezápornému zbytku 8
Příklad: ělení bez návratu k nezápornému zbytku = = (97), d = = (), v bitu S se zaznamenává znaménko průběžného zbytku a to pak rozhoduje o následující operaci (+ -). krok S A Q ---------------------------------------------------------------------------- x = - -d --------- x q 3 = Pos. vl. xx 2 - -d --------- xx q 2 = Pos. vl. xxx 3 + +d --------- xxx q = Pos. vl. xxxx 4 + +d --------- xxxx q = R Q = 9
3=, 7=, -7= + -d < => c4 = x posuv <- + +d x < => c3 = xx + +d posuv xx > => c2 = xxx + -d posuv xxx < => c = xxxx + +d posuv xxxx < => c = + +d (korekce na kladný zbytek) xxxx zbytek 2 Příklad: 3:7=4, zb 2 bez návratu k nezápornému zbytku
ělení bez restaurace poslední zbytek je kladný Vyjde-li poslední zbytek záporný, musí se upravit na nezápornéčíslo korekcí, tedy přičtením dělitele. Grafické znázornění dělení bez restaurace nezáporného zbytku pro případ kladného a záporného posledního zbytku: -d r x2 2r +d r 2 x2 2r 2 -d r x2 3 2r 3 +d r 4 kladný zbytek t
ělení bez restaurace poslední zbytek je záporný 2r r -d +d r 2 2r 3 x2 -d r 3 2r 2 +d záporný zbytek! r 4 +d korekce korekce r 4 kor t 2
ělení SRT - tabulka odhadů podle tří bitů R i ělení čísel se znaménkem se po dlouhou dobu převádělo na dělení absolutních hodnot a dodatečné určení znaménka výsledku. Tuto nedokonalost odstranil algoritmus SRT autorů Sweeneyho, Robertsona a Tochera (958). Prováděné operace se pro každý krok určují například (je to školní příklad) podle nejvyšších tří bitů průběžného zbytku R i. Ri d> bit podílu d> operace d< bit podílu d< operace posuv vlevo posuv vlevo -d, posuv vlevo - +d, posuv vlevo - +d, posuv vlevo -d, posuv vlevo 3
49=, 7=, -7= -49= (d>) - +d <- + x -d x xx <- + xxx <- -d xxx <- - xxxx +d xxxx zbytek Q = - = = -6+8++2- = -7 Ri - Příklad: -49:7=-7, zb. SRT d> bit podílu d> operace posuv vlevo -d, posuv vlevo +d, posuv vlevo d< bit podílu - d< operace posuv vlevo +d, posuv vlevo -d, posuv vlevo 4
Zdokonalený algoritmus dělení SRT Odhad podle tří bitů průběžného zbytku je nedostatečný a způsobuje časté chybování postupu SRT. Praktické realizace postupu (např. Pentium) odhadují hodnotu číslice podílu více bitů průběžného (okamžitého) zbytku, a podle více bitů dělitele. Je to aplikace principu zobecněného ukazatele do tabulky odhadů. Například v Pentiu se odhaduje číslice podílu podle 7 bitů průběžného zbytku a podle 5 bitů hodnoty dělitele. Jinou modifikací algoritmu dělení je postup 2 bity najednou, tedy s radixem 4. Obecný vzorec: r radix R i+ = rr i q n-i d 5
Chyba dělení u Pentia (listopad 994) $475M 6
Obvodová realizace dělení - sekvenční dělička SRT posuv P ělenec B A n n- n-2 n- n bitů n bitů n bitů operace +/-/ prázdná řízení operací n- A B dělitel d 7
Postup sekvenčního dělení. Má-li dělenec i dělitel d k levostranných nul, posunou se obsahy registrů PA i B o k bitů vlevo. V této fázi lze v zájmu zrychlení operace dělení odstranit levostranné nuly dělence nebo dělitele posuvem obsahu příslušného registru vlevo. To se však na závěr musí kompenzovat odpovídajícím posuvem výsledku.. Je-li p n = p n- = p n-2, pak q n-i = posuv registru PA o bit vlevo Je-li p n = pak q n-i =, odečtení PA - B, posuv registru PA o bit vlevo Je-li p n = pak q n-i = -, přičtení PA + B, posuv registru PA o bit vlevo Krok provedeme celkem (n - k) krát. 2. Je-li koncový zbytek menší než nula, přičti P + B a odečti Q-. 8
Kombinační dělička s restaurací odečítačka x - bit dělence y - bit dělitele u a - výstup výpůjčky - řídicí signál t a - vstup výpůjčky - řídicí signál z y - bit dělitele - výstup rozdílu kde x je vstup jednoho bitu dělence, y je vstup jednoho bitu dělitele, t je vstup výpůjčky, a je řídící vstup ( odčítej, neodčítej), který vede i do sousední buňky vpravo, z je výstup rozdílu, u výstup výpůjčky. Rovněž bit dělitele y je veden do sousední buňky dole. Pro a = se odečítá, tedy z = x - (y + t), pro a = se neodečítá, tedy z = x. Funkci odečítačky definuje pravdivostní tabulka. 9
Pravdivostní tabulka odečítačky ostáváme tak rovnice z = x a ( y t ) (a je řídicí vstup: odčítej, neodčítej), u = x y + x t + yt 2
Obvodová dělička s restaurací q 4 q 3 6 5 4 d 2 d d = d 3 u - výstup výpůjčky a - řídicí signál 2 x - bit dělence y - bit dělitele t - vstup výpůjčky a - řídicí signál y - bit dělitele z - výstup rozdílu q 2 q q r r r 2 R 2
Obvodová dělička s restaurací - komentář Shora vstupují do kaskády odečítaček jednotlivé bity dělence, bity 6 až, a tříbitový dělitel d. Na levé straně vystupují jednotlivé bity kvocientu Q. Počet řádků kaskády je dán potřebným počtem operací odečítání, oby se poloha tříbitového dělitele dostala do nejnižšího řádu dělence. V této poloze vznikne poslední průběžný rozdíl, tedy konečný zbytek. Jde o kombinatorické dělení podle postupu s návratem k nezápornému zbytku, protože v každé operační úrovni vzniká nezáporný výsledek pokud by vznikl po odečtení záporný mezivýsledek, neodečítá se, tedy nejde odečíst. 22