Adunarea si scaderea fara rotunjiri in virgula flotanta
Preconizam o prezentare graduala a
problematicii operatiilor de adunare si scadere in virgula
flotanta, neabordand, pentru inceput, aspecte legate de despachetarea
operanzilor/impachetarea rezultatului dintr-un/intr-un format standard, dar, in
special, de rotunjire. Astfel vom accepta o structura de tipul celei
reprezentate in fig. 5.3, la care consideram ca operanzii sosesc in
forma despachetata (cu hidden bit explicit), adica dimensiunea
magistralei este de () biti, anume e
pentru exponent, m pentru
mantisa si cate unul pentru semn si hidden bit.
Fata de cele
cunoscute anterior relativ la o configuratie cum este cea a
unitatii de significand din fig.5.3, mai admitem ca nu doar
registrul A are capacitatea de deplasare la dreapta (el putand fi deplasat
si la stanga), ci si registrul M. Cele doua registre A si M
au cate () biti pentru a putea stoca numerele significand cu
semne asociate lor, iar A mai are asociat un flag, A-COUT, care este setat pe
1, in mod implicit, atunci cand se obtine transport (cout) din
rangul msb al adder/subtracter-ului).
In ceea ce priveste unitatea de exponent, compararea continutului celor doua registre de exponent, E1 si E2, fiecare de e biti , se realizeaza prin operatia de scadere, a carei rezultat este incarcat in registrul E, si el tot de e biti. Acest registru are capacitatea de incrementare si decrementare a continutului sau, ceea ce se petrece atat in operatia de aliniere a numerelor significand, cat si la cea de normalizare a rezultatului, evident, doar pana la aparitia situatiilor de overflow sau underflow. Mai mentionam ca in E se incarca, dupa ce a fost traversata operatia de aliniere, valoarea exponentului mai mare dintre continuturile lui E1 si E2, tatonarea acestui fapt se presupune a fi facuta in mod cablat.
Cu aceste precizari,
in termenii limbajului de descriere cunoscut, prezentam in fig.5.10 secventa
de cod corespunzatoare procedurii de adunare/scadere la care nu s-au
facut nici un fel de referiri la procesul de rotunjire, toti
bitii care, prin deplasari, parasesc registrele fiind
considerati trunchiati, pierduti. Ar fi de mentionat
ca in descriere, la incarcarea registrelor cu operanzii intrare (enunturile
INPUT), nu au fost detaliati bitii magistralei INBUS care contribuie
la parte de exponent, respectiv de mantisa, fiind specificati doar
operanzii (si
respectiv
si
). De asemenea, operatiile de deplasare, la stanga
si la dreapta, precum si cele de tatonare a unui rezultat normalizat
nu au fost prezentate in detaliu. Recurgand in aceeasi nota, si la
alte simplificari, o observatie aparte se impune relativ la
exceptii care au fost rezumate doar la unele dintre situatiile
posibile de overflow si underflow, precum si la cea de rezultat zero.
Astfel a fost prevazut un singur flag, ERROR, care este setat pe 1 atunci
cand este necesara o deplasare la dreapta a significand-ului rezultat din
A si exponentul are deja valoarea sa maxima reprezentabila,
Referindu-ne
la procedura din fig. 5.10, in urma incarcarii operanzilor si
inainte de compararea rezultatelor, este recomandabila testarea de zero a
ambilor operanzi significand, situatie in care rezultatul poate fi
anticipat fara a mai parcurge intreaga procedura. In rest, operatiile elementare
se inlantuie conform cu cele descrise de (5.1), in sensul ca, in
urma compararii - prin scadere - a exponentilor, se aliniaza
mantisele, operatie legat de care ar fi posibila o interventie
in procedura pentru a stopa deplasarile in vederea alinierii
dupa () pasi si dupa │E│pasi,
intrucat putem avea │E│>(
) si atunci numarul de pasi diferenta
(│E│- m - 1) sunt inutili, significand-ul deplasat, oricum, devenind
zero. Urmarind in continuare procedura, dupa alinierea numerelor
significand, se executa operatia propriu-zisa, care este
succedata de normalizarea rezultatului in vederea impachetarii sale,
cu corespunzatoare tatonari de cazuri exceptii. Acestei
descrieri a procedurii de adunare/scadere ii corespunde aproape intocmai
schema bloc a unui calculator celebru in epoca sistemnelor de capacitate medie
si mare, de tip mainframe, anume IBM/S360, model 91. Aceasta
masina include doua unitati separate de virgula
mobila, una destinata operatiilor de adunare si
scadere (add unit), iar cealalta destinata operatiilor de
inmultire si impartire (multiply/divide unit) [Haye98]. Ne
vom referi doar la add unit care permite adunarea/scadere de numere pe 32,
respectiv 64 de biti. Motivul inserarii schemei bloc
corespunzatoare (acestei unitati fig. 5.11 [Haye98]) in aceasta lucrare este, pe
langa faptul ca poate sa constituie o sinteza a ceea ce
este prezentat mai in amanunt in fig. 5.10, pune in relief unele mecanisme
hardware de accelerare a procesului de adunare.
Astfel, cei doi exponenti sunt stocati in registrele si
si diferenta dintre continuturile lor,
evaluata prin adder 1, determina care dintre mantise (inca nu era
cunoscuta notiunea de significand), stocate in registrele
si
, trebuie deplasata la dreapta in vederea alinierii.
Trebuie mentionat ca, intrucat baza sistemului de numeratie a
intregii serii de fabricatie careia ii apartine si calculatorul
in discutie este
, atunci daca
, intrucat k este un numar hexazecimal, numarul
pozitiilor binare de deplasat la dreapta este 4k. Intregul proces de
aliniere a mantiselor este accelerat printr-o schema combinationala
de deplasare, notata Shifter 1, care permite efectuarea acestei
operatii simultan pentru cele 4k pozitii binare. In continuare,
mantisa deplasata este adunata/scazuta la/din mantisa
nedeplasata prin adder 2, reprezentand un sumator/scazator pe 56
biti (64 biti din care se scade bitul de semn si 7 biti
pentru campul de exponent) implementat cu mai multe niveluri de
carry-lookahead. Suma/diferenta preliminara este memorata
temporar in registrul R, a carui continut este investigat de schema
combinationala, notata zero digit checker, a carei menire
consta in determinarea numarului de cifre hex egale cu zero, asa
numite leading zeros, care trebuie eliminate prin procesul de normalizare.
Valoarea determinata prin acest al doilea element de structura destinat
accelerarii adunarii, constituit de zero digit checker,
determina pe de o parte, numarul de pozitii hexazecimale cu care
trebuie deplasata la stanga mantisa suma/diferenta
preliminara din R, operatie care este de asemenea accelerata
printr-o schema combinationala, notata Shifter 2 in fig.
5.11. Acest al treilea element de structura de accelerare asigura
deplasarea simultana a mantisei preliminara cu numarul de
leading zerouri determinate de zero digit checker. Pe de alta parte,
aceasta din urma valoare intervine, prin adder 3, fiind scazuta
din valoarea gasita mai mare la compararea exponentilor,
definitivand procesul de normalizare al rezultatului, al carui exponent
si mantisa finale vor fi preluate din registrele E3 si M3. In
mod evident, cele trei scheme de accelerare, precum si baza
, determina unele deosebiri intre schema din fig. 5.11
si descrierea din fig. 5.10.
Politica de confidentialitate |
![]() |
Copyright ©
2025 - Toate drepturile rezervate. Toate documentele au caracter informativ cu scop educational. |
Personaje din literatura |
Baltagul – caracterizarea personajelor |
Caracterizare Alexandru Lapusneanul |
Caracterizarea lui Gavilescu |
Caracterizarea personajelor negative din basmul |
Tehnica si mecanica |
Cuplaje - definitii. notatii. exemple. repere istorice. |
Actionare macara |
Reprezentarea si cotarea filetelor |
Geografie |
Turismul pe terra |
Vulcanii Și mediul |
Padurile pe terra si industrializarea lemnului |
Termeni si conditii |
Contact |
Creeaza si tu |