Sunteți pe pagina 1din 15

Capitolul IV REPREZENTRI INTERNE

IV.1. Introducere
Reprezentrile interne elementare constituie un element al arhitecturii oricrui calculator, deoarece este vorba despre o resurs accesibil direct programatorilor. n schimb structurile de date mai complicate, care se definesc pornind de la reprezentrile interne elementare, nu mai in de arhitectura calculatorului, ci de software. Care sunt ns reprezentrile elementare? Distingem 3 tipuri principale de asemenea reprezentri: - date numerice (numite submulimi finite ale mulimilor numerelor ntregi, respectiv raionale) - date "alfa-numerice" sau logice (caractere, respectiv valori de tip boolean) - instruciuni n limbaj main; acestea sunt singurele reprezentri interne elementare nestandardizate (i, evident, neportabile), fiind specifice fiecrei arhitecturi Studiul reprezentrilor elementare se concentreaz asupra eficienei i siguranei (fiabilitii) reprezentrilor interne. Problema se pune mai ales la reprezentrile numerice, care sunt folosite pentru operaii aritmetice. Deoarece nu se lucreaz cu mulimile de numere naturale, ntregi, raionale sau reale, ci cu submulimi finite ale acestora, n mod inevitabil apar erori. Cel mai adesea, aceste erori sunt legate de faptul c o operaie aplicat asupra unor reprezentri din submulimea cu care se lucreaz poate produce un rezultat din afara acelei sumbulimi. Exist dou mari tipuri de asemenea erori: a) depiri Dac lucrm cu reprezentri de numere naturale, prin scdere putem obine un rezultat negativ, care nu este un numr natural. Mai mult, dac domeniul reprezentabil cuprinde numerele ntregi din intervalul [-a,b], a,b 0, chiar i adunarea a dou numere din acest domeniu poate produce un rezultat din afara domeniului (mai mic dect -a sau mai mare dect b). b) aproximri mprirea a dou numere ntregi poate produce un rezultat fracionar. Dac acest rezultat este memorat tot sub forma unui numr ntreg (pentru a rmne n acelai domeniu), este evident c reprezentarea este de fapt o aproximare. n mod similar, dac lucrm cu reprezentri avnd un anumit numr (finit) de zecimale, rezultatul unei operaii de nmulire sau mprire poate necesita mai multe zecimale, deci va fi aproximat. Indiferent de tipul erorii, cauza fundamental este caracterul finit al reprezentrilor, adic numrul finit de bii care este alocat unei reprezentri. Situaiile n care apar erori trebuie bine nelese, pentru a putea contracara efectele apariiei lor n programe.

IV.2. Coduri detectoare i coduri corectoare de erori


Detectarea i corecia erorilor sunt extrem de importante n transmisia i prelucrarea datelor. Indiferent de forma fizic prin care se realizeaz transmiterea datelor, acesta este afectat de erori (zgomot), cauzate de nsi natura fizic a canalului de transmisie. Deoarece datele sunt transmise de cele mai multe ori sub forma unor semnale electrice, erorile constau de obicei n interferene electrice pe liniile de transmitere a semnalului. Pentru detecia i corecia erorilor se utilizeaz reprezentri speciale, care pornesc de la reprezentarea iniial a datelor de transmis i i adaug o serie de bii suplimentari redundani. Cu ajutorul redundanelor se poate reconstitui informaia transmis chiar dac unii dintre biii transmii au fost afectai de erori.

Cel mai simplu mod de detectare a erorilor este adugarea la datele transmise a unui bit suplimentar, numit bit de paritate. Valoarea acestui bit este aleas n aa fel nct numrul total de bii cu valoarea 1 s fie par; spunem c n acest caz avem un cod cu paritate par. Desigur, se poate lucra i cu paritate impar: bitul de paritate este ales astfel nct numrul total de bii cu valoarea 1 s fie impar.

Cum funcioneaz detecia erorilor? S presupunem c avem de transmis un octet de date i folosim paritate par. La cei 8 bii de date se adaug bitul de paritate, astfel nct, dintre cei 9 bii care vor fi transmii, un num par s aib valoarea 1. La recepie se verific numrul de bii cu valoarea 1, dintre cei 9 primii; dac acest numr este impar, nseamn c unul dintre biii transmii a fost alterat. Transmisie Octet date Bit paritate Total bii "1" 10110011 1 6 (par) Octet date Bit paritate Total bii "1" Concluzie 10110011 1 6 (par) corect 10010011 1 5 (impar) eroare Acest cod nu realizeaz i corecia erorilor, deoarece, dei tim c un bit a fost alterat, nu putem spune care anume, deci nu putem reconstitui octetul iniial. Totui, detecia erorilor este nc util, deoarece receptorul poate solicita retransmiterea datelor alterate. O problem mai mare este c, dup cum se observ imediat, se poate detecta alterarea unui singur bit; dac n cursul transmisiei sunt afectai mai muli bii, codul de mai sus devine ineficient. Pentru asemenea cazuri se adaug mai muli bii suplimentari, ceea ce crete i numrul de erori care pot fi detectate. Transmisie Octet date Bit paritate Total bii "1" 10010011 0 4 (par) Octet date Bit paritate Total bii "1" Concluzie 11011011 0 6 (par) corect (?!) Pentru corecia erorilor se utlizeaz coduri mai complexe, cum este codul Hamming. Acesta mparte datele de transmis n pachete de cte 4 bii i adaug la fiecare asemenea pachet cte 3 bii suplimentari. Fr a intra n detalii, codul Hamming permite dectarea i corecia mai multor erori simultan . Recepie Recepie

IV.3. Codificri alfanumerice


Codificrile alfanumerice sunt reprezentri binare ale datelor de tip text (litere mari i mici, cifre privite ca nite caractere, simbolurile pentru operatori, separatori etc.). Ca orice tip de dat care nu este strict numeric, caracterele trebuie codificate pentru a putea fi reprezentate sub form numeric, deoarece procesorul poate lucra doar cu numere. O prim ncercare de standardizare a reprezentrilor alfanumerice a dus la elaborarea codului EBCDIC (Extended Binary Coded Decimal Interchange Code). Deoarece ns nu au fost urmate nite principii clare n proiectare, codul EBCDIC nu s-a impus. n principal nu s-a inut cont de faptul c, dac lucrul cu caractere nu implic operaii aritmetice sau logice, exist totui unele prelucrri care se aplic asupra acestora, cum ar fi comparaia, conversii ntre litere mari i mici, conversii ntre iruri de caractere i tipuri numerice etc. Mult mai bine definit este codul ASCII (American Standard Code for Information Interchange), care s-a impus ca standard, fiind folosit pn astzi. n proiectarea sa au fost avute n vedere cteva aspecte care uureaz prelucrarea caracterelor: - Literele mici au coduri consecutive, n conformitate cu ordinea alfabetic. La fel s-a procedat i n cazul literelor mari. Astfel sunt facilitate att implementarea comparaiei ntre dou caractere, care se reduce la comparaia ntre dou numere naturale, ct i operaiile de testare (de exemplu, dac un caracter este liter mare sau nu). - Cifrele au de asemenea coduri consecutive. Mai mult, ultimii 4 bii ai codului unei cifre dau exact valoarea cifrei respective, ceea ce uureaz conversia ntre iruri de caractere i tipuri numerice. Dat fiind c literele alfabetului latin (mari i mici), mpreun cu cifrele, semnele de punctuaie i cele matematice, totalizeaz mai puin de 100 de simboluri diferite, codul ASCII prevede 128 caractere, ceea ce permite o codificare pe 7 bii. Primele 32 coduri sunt alocate unor caractere speciale. Acestea nu apar explicit n text, dar influeneaz modul de prezentare (dispunere n pagin) al acestuia, fiind folosite n special de ctre editoarele de texte. De exemplu, codul 9 corespunde caracterului "tab", care este folosit pentru alinierea unor pri din text. Chiar i dintre rile care folosesc o scriere bazat pe alfabetul latin ns, multe nu se rezum la simbolurile acestuia. Un exemplu n acest sens l constituie literele cu accent (diacritice), existente n mai multe limbi, inclusiv limba romn. Deoarece n acest mod numrul simbolurilor de reprezentat crete, a fost definit un nou standar, numit ISO 8859-1 (Latin-1), care este de fapt o extensie pe 8 bii a codului ASCII. Exist mai multe asemenea codificri alternative, capabile s reprezinte simboluri ale diferitelor scrieri ale lumii, nu doar

ale celor bazate pa alfabetul latin. n sistemele de operare moderne, utilizatorul poate schimba n orice moment codificarea folosit, pentru a se adapta diferitelor alfabete. Pentru a permite accesul simultan la simbolurile mai multor alfabete a fost elaborat un standard nou, numit Unicode. Acesta folosete coduri de 2 octei pentru caractere, ceea ce ridic numrul simbolurilor disponibile la 65536. Bineneles, sunt incluse i codurile ASCII. O alternativ la Unicode este format de codul UCS (Universal Character Set).

IV.4. Reprezentarea intern a numerelor IV.4.1. Scrierea poziional


Scrierea poziional a reprezentat la apariia sa un mare pas nainte n matematic. Ca o exemplificare a acestei afirmaii, putem considera adunarea a dou numere naturale oarecare. Dac numerele sunt reprezentate n scriere roman (care nu este poziional), se observ imediat c operaia este foarte dificil de realizat. n schimb, adunarea acelorai numere reprezentate n baza 10 (care este o scriere poziional) este banal. Acest exemplu simplu arat marele avantaj al scrierii poziionale, i anume c permite descrierea algoritmic a operaiilor aritmetice, ceea ce o face indispensabil n arhitectura calculatoarelor. De exemplu, sumatorul serial, format prin alturarea mai multor sumatoare complete, se bazeaz tocmai pe algoritmul de adunare specific scrierii poziionale. Facem observaia important c scrierea poziional este tot o reprezentare. Astfel, de exemplu, 72018 nu este un numr, ci reprezentarea unui numr. Fiecrei poziii din reprezentare i este ataat un factor implicit, legat de baza de numeraie. Ce este ns baza de numeraie? Acesta poate fi orice numr natural d>1 (condiia este necesar, deoarece cu un singur simbol nu se pot folosi factori implicii). Mulimea cifrelor (simbolurilor) n baza d are exact d elemente, iar fiecrei cifre i corespunde o valoare din mulimea {0,1,,d-1}. Calculatorul lucreaz n baza d=2, din mai multe motive: - estimri analitice i probabiliste arat c bazele n care se pot face cel mai rapid calcule sunt 2 i 3 - din punct de vedere tehnic, sunt mai uor de realizat circuite care lucreaz cu 2 valori diferite (corespunztoare celor 2 cifre) - din punct de vedere teoretic, baza 2 se poate "scufunda" n logica booleean, deci se pot folosi rezultatele logicii booleene pentru implementarea operaiilor aritmetice Limitele scrierii poziionale sunt, de fapt, limitele provenite din caracterul inerent finit al reprezentrilor n calculator. De exemplu, dac s-ar reprezenta numerele n baza 2 fr semn (pozitive), atunci: - numrul maxim reprezentabil pe un octet ar fi 255 = 28-1; - numrul maxim reprezentabil pe doi octei ar fi 65535 = 216-1; - numrul maxim reprezentabil pe patru octei ar fi 4294967295 = 232-1. S vedem cum se reprezint un numr ntr-o baz oarecare d, dN*-{1}, pe n cifre la partea ntreag i m cifre la partea zecimal. Reprezentarea unui numr X este unic i este dat de irul de simboluri: n -1 i = m..n - 1 X= a di
(10 ) an-1an-2.a1a0,a-1..a-m, unde ai {0,1,,d-1}, , astfel nct . n expresia de mai sus, ai reprezint valoarea cifrei de pe poziia i+1 de la stnga virgulei, i=0..n-1, iar a-j reprezint valoarea cifrei de pe poziia j de la dreapta virgulei, j=1..m, n timp ce di este factorul implicit pentru poziia i. Formula de mai sus este totodat i formula trecerii din baza d n baza 10. Exemplu: FA2,B(16) = 15162 + 10161 + 2160+1116-1 = 3840 + 60 + 2 + 11 / 16 = 4002,6875(10) Trecerea din baza 10 n baza d este mai complicat. Pentru exemplificare, vom considera d=2. Fie numrul 813,65(10). Pentru a determina reprezentarea n baza 2 a prii ntregi, vom aplica urmtorul algoritm: Se mparte numrul la 2 i se reine restul. Ctul obinunt se mparte la rndul su la 2, iar procesul de repet pn cnd se obine ctul 0. Reprezentarea n baza 2 este irul resturilor obinute, luate n ordine invers. 813 / 2 = 406 + 1 / 2 1 (LSBi) 406 / 2 = 203 + 0 / 2 0 203 / 2 = 101 + 1 / 2 1 101 / 2 = 50 + 1 / 2 1 50 / 2 = 25 + 0 / 2 0 25 / 2 = 12 + 1 / 2 1 i =-m

( )
i

12 / 2 = 6+0/2 0 6/2 = 3+0/2 0 3/2 = 1+1/2 1 1/2 = 0 + 1 / 2 1 (MSBi) n concluzie, 813(10) = 1100101101(2). Pentru a obine partea zecimal a reprezentrii n baza 2 se procedeaz astfel: Se nmulete partea zecimal cu 2 i se reine cifra de la partea ntreag (nu poate fi dect o singur cifr semnificativ, cu valoarea 0 sau 1). Noua parte zecimal se nmulete la rndul su cu 2, iar procesul se repet pn cnd partea zecimal devine 0. irul cifrelor obinute la partea ntreag din fiecare nmulire formeaz rezultatul cutat. Diferena fundamental fa de cazul prii ntregi este c partea zecimal poate s nu devin 0 niciodat n procesul descris mai sus. Cu alte cuvinte, este posibil ca unei reprezentri cu numr finit de cifre la partea zecimal n baza 10 s-i corespund o reprezentare cu numr infinit de cifre la partea zecimal n baza 2. n acest caz, oprirea se realizeaz atunci cnd se observ apariia unei repetiii la partea zecimal, ceea ce se traduce matematic printr-o reprezentare periodic. 0,65 / 2-1 = 1 + 0,3 1 (MSBf) 0,3 / 2-1 = 0 + 0,6 0 0,6 / 2-1 = 1 + 0,2 1 0,2 / 2-1 = 0 + 0,4 0 0,4 / 2-1 = 0 + 0,8 0 0,8 / 2-1 = 1 + 0,6 1 (LSBf) . (perioad) n final se obine 813,65(10) = 1100101101,10(1001)(2). Desigur, un asemenea numr nu se poate reprezenta exact n baza 2 ntr-un calculator, deoarece ar necesita un numr infinit de cifre. Reprezentarea sa va fi deci o aproximare a numrului. Aproximarea poate aprea i n alte situaii. Este suficient ca numrul s aib mai multe cifre la partea fracionar dect admite codificarea, chiar dac m (numrul de cifre zecimale) este finit. Ct de mare este aceast aproximare? Este uor de vzut c dac m=k, atunci aproximarea este de cel mult 2 -k. O problem similar apare dac exist la partea ntreag mai multe cifre dect se pot reprezenta. n acest caz spunem c se produce o depire. Mult mai simplu se pot realiza conversiile ntre baze care sunt puteri ale acelai numr. Dac avem dou baze d1 i d2, iar d1 = d2k, atunci fiecrei cifre din baza d1 i corespunde n mod unic o combinaie de k cifre n baza d2 i reciproc. Mai general, dac d1 = nx i d2 = ny, atunci fiecrei combinaii de y cifre n baza d1 i corespunde n mod unic o combinaie de x cifre n baza d2. n acest caz ns, trecerea ntre bazele d1 i d2 se face cel mai uor prin intermediul bazei n. Exemplu: d1 = 8 = 23 ; d2 = 16 = 24 703,102(8) = 111 000 011 , 001 000 010 (2) = 0001 1100 0011 , 0010 0001 0000 (2) = 1C3,21(16) 6703,102(8) = 110 111 000 011 , 001 000 010 (2) = 1101 1100 0011 , 0010 0001 0000 (2) = DC3,21(16)

IV.4.2. Reprezentrile BCD i n exces


Att reprezentrile BCD, ct i n exces, sunt folosite mai ales n aplicaii de tip business, n care este mai avantajos ca numerele s se reprezinte ca iruri de cifre n baza 10, fiecare cifr fiind reprezentat pe 4 bii. Motivaia este acea c, n asemenea aplicaii, necesitatea afirii valorilor (evident, n baza 10) apare foarte des, deci este convenabil o reprezentare care s nu necesite conversii ntre bazele 2 i 10, chiar dac preul pltit const ntr-o penalizare de performan la efectuarea operaiilor aritmetice. Codul BCD utilizeaz direct scrierea poziional n baza 2. Astfel, cifra 0 se reprezint pe 4 bii ca 0000, 1 ca 0001, ..., 9 ca 1001. Cele 6 combinaii urmtoare (1010, ..., 1111) pur i simplu nu sunt folosite. n schimb, codul exces este non-poziional. Un cod Excess-k pornete tot de la scrierea poziional n baza 2, dar cu o deplasare pe k poziii. Cu alte cuvinte, reprezentarea asociat unei cifre c este reprezentarea n scrierea poziional a cifrei c+k. Exemple: codurile BCD i Excess-3 Zecimal BCD Excess-3 0 0000 0011 1 0001 0100 2 0010 0101 ... ... ... 7 0111 1010

1000 1011 1001 1100 1413(10) = 0001 0100 0001 0011(BCD) = 0100 0111 0100 0110(Excess-3) Adunarea n cod BCD este asemntoare cu adunarea obinuit. Dup cum este de ateptat, diferenele apar atunci cnd se genereaz transport ctre cifra urmtoare, altfel spus cnd suma cifrelor curente depete 9: 5(10) = 0101 + 5(10) = 0101 + 3(10) = 0011 8(10) = 1000 8(10) = 1000 = 8(BCD) 13(10) = 1101 13(BCD) = 0001 0011 Soluia este adunarea valorii 6 (0110) atunci cnd suma depete valoarea 9. 5(10) = 0101 + 9(10) = 1001 + 1000 7(10) = 0111 8(10) = 1101 + 10000 + 0110 0110 6(10) = 6(10) = 11001 = 13(BCD) 10110 = 16(BCD) Tem: De ce este corect acest algoritm de adunare BCD? Pe baza algoritmului de adunare se poate proiecta un sumator BCD. Acesta const n primul rnd dintr-un sumator serial pe 4 bii, la care se adaug o schem de detectare a depirii valorii 9 la rezultat. Dac s-a depit valoarea 9, se realizeaz adunarea suplimentar a valorii 0110; pentru aceast etap nu este necesar un sumator serial pe 4 bii, deoarece nu toate poziiile sunt implicate n adunare. Diagrama logic a unui sumator BCD este urmtoarea:

8 9

IV.4.3. Reprezentarea numerelor ntregi: aritmetica n virgul fix


Reprezentarea numerelor n calculator se bazeaz pe scrierea poziional, dar nu este identic acesteia. Anumite diferene rezult din specificul sistemelor de calcul. Cel mai important aspect este c ntr-un calculator se lucreaz cu circuite avnd dou valori posibile, deci se pot reprezenta exact dou simboluri distincte, asociate de cele mai multe ori cifrelor n baza 2. Aceast situaie are dou consecine importante: - baza de numeraie folosit n calculatoare este 2 - nu se pot reprezenta separat semne speciale, cum sunt "+","-" sau ","; spunem c reprezentrile trebuie s fie omogene Cu toate acestea, semnul unui numr, ca i virgula, sunt indispensabile pentru orice codificare poziional, deci trebuie gsit o modalitate de a le reprezenta i pe acestea. Soluiile adoptate pentru cele dou simboluri (semn, respectiv virgul) difer ntre ele, dup cum difer i semnificaia acestor simboluri. Semnul numrului este dat de un bit. Cu alte cuvinte, unul dintre biii utilizai n reprezentare capt o semnificaie diferit de a celorlali: n loc s participe la scrierea poziional n modul descris anterior, are rolul de a codifica semnul numrului. n mod natural, bitul cel mai semnificativ (aflat pe poziia din extrema stng) este cel folosit n acest scop, deoarece astfel restul biilor pot continua s formeze o reprezentare poziional. Acest bit poart numele de bit de semn, iar codificarea semnului cu ajutorul su se face astfel: - valoarea 0 indic semnul plus (numr pozitiv) - valoarea 1 indic semnul minus (numr negativ)

Se poate alege i codificarea invers, n care valoarea 1 s indice semnul plus, iar 0 - semnul minus. S-a preferat prima variant, deoarece astfel reprezentarea numerelor pozitive rmne identic scrierii poziionale, n timp ce reprezentarea numerelor negative necesit oricum unele schimbri. Excepie de la acest mod de reprezentare a semnului face reprezentarea "cu exces", care, aa cum am vzut, nu este de fapt o scriere poziional. n cazul virgulei, esenial este nu simbolul n sine, ci poziia sa. Din acest motiv nu este necesar s se reprezinte explicit caracterul. Exist dou variante de reprezentare implicit a virgulei: - toate numerele au virgula pe aceeai poziie: virgul fix ("aritmetic ntreag") - poziia virgulei difer de la numr la numr: virgul mobil ("aritmetic flotant") Esenial pentru portabilitate este standardizarea aritmeticii (att ntreag, ct i fix), n toate implementrile existente. Aceasta nseamn ca funciile elementare s fie definite i calculate la fel i, mai mult, cazurile de excepie s fie tratate la fel. Obiectivul urmrit de orice reprezentare este eficiena calculului. n principal, aceasta se traduce prin existena unor algoritmi eficieni pentru efectuarea operaiilor aritmetice. n particular, se dorete s fie flosit un singur algoritm pentru adunare i scdere, ceea ce ar simplifica structura hardware a circuitelor care realizeaz aceste operaii. Codificrile n virgul fix se fac pe n+m bii, din care n sunt folosii pentru a reprezenta partea ntreag, iar restul de m bii pentru partea fracionar. Condiiile care trebuie ndeplinite de m i n sunt deci urmtoarele: a) m 0; dac m=0, se lucreaz cu numere ntregi b) n 1; dac n=1, se lucreaz cu numere subunitare Exist trei tipuri majore de codificri n virgul fix: - prin cantitate i semn - n complement fa de 2 (sau, mai general, fa de baza de numeraie) - n complement fa de 1 (sau, mai general, fa de cifra maxim) O caracteristic comun cele trei codificri este reprezentarea numerelor pozitive, care coincide n toate cazurile cu scrierea poziional. O codificare se numete redundant dac exist numere care au dou reprezentri diferite. n codificrile n virgul fix folosite, singurul numr ce poate avea dou reprezentri este 0.

IV.4.4. Reprezentarea prin modl i semn


Reprezentarea prin modl i semn este notat A+S i se definete astfel: a n-2 2 n-2 + ... + a -m 2-m pentru a n-1 = 0 m ( ) Valn, a a ...a a a ...a = A +S n -1 n -2 1 0 -1 -m n -2 -m pentru a n-1 = 1 a n-2 2 + ... + a -m 2

n principiu, reprezentarea coincide cu scrierea n baza 2, cu diferena c semnul este reprezentat de un bit, iar virgula este implicit. n reprezentarea prin modl i semn, pe n+m bii exist 2n+m reprezentri diferite (iruri diferite de bii). Ele corespund ns la numai 2n+m -1 numere diferite; codificarea este redundant, cci 0 = valA+Sn,m (000) = valA+Sn,m (100). Altfel spus, numrul 0 admite dou reprezentri diferite, anume 000 i 100. Foarte importante n orice reprezentare sunt limitele domeniului reprezentabil, precum i precizia reprezentrii. Aceste caracteristici sunt prezentate mai jos. - Cel mai mic numr reprezentabil este: minA+Sn,m = valA+Sn,m (111) = -(2n-1-2-m) - Cel mai mare numr reprezentabil este: MaxA+Sn,m = valA+Sn,m (011) = 2n-1-2-m - Intervalul pe care se afl numerele reprezentabile este [-(2n-1-2-m); +(2n-1-2-m)]. - Numerele reprezentabile exact sunt cele ncepnd cu min = -(2n-1-2-m), cu pasul 2-m. Celelalte numere din interval se reprezint aproximativ, cu eroare de cel mult 2-m. Deci, precizia reprezentrii este 2-m. Facem observaia c, pentru numere ntregi, precizia este 1. Aceasta nu nseamn c nu pot aprea erori de reprezentare, deoarece rezultatul unei operaii de mprire ntre numere ntregi nu este obligatoriu un numr ntreg. Evident, pentru n+m (numrul total de bii alocat reprezentrii) fixat, trebuie realizat un compromis ntre magnitudine i precizie, deoarece: - creterea magnitudinii duce la aproximare mai slab - o precizie mai bun duce la magnitudine sczut Exemple:

a) ValA+S8,0 (00110011) = 51 00110011 +(20 + 21 + 24 + 25) = 51 b) ValA+S6,2 (00110011) = 12,75 = 51 : 22 00110011 +(2-2 + 2-1 + 22 + 23) = 12,75 c) ValA+S4,4 (00110011) = 3,1875 = 51 : 24 00110011 +(2-4 + 2-3 + 20 + 21) = 3,1875 d) ValA+S8,0 (10110011) = -51 10110011 -(20 + 21 + 24 + 25) = -51 e) minA+S8,0 = valA+S 8,0(11111111) = -(27 - 20) = -(128 1) = -127 maxA+S8,0 = valA+S 8,0(01111111) = 27 - 20 = 128 1 = 127 n reprezentare A+S pe un octet, numere ntregi (m = 0), intervalul reprezentabil este [-127; 127]. n acest mod se pot deci reprezenta 255 numere diferite, din 1 n 1. f) ValA+S4,4 (10110011) = -3,1875 10110011 -(2-4 + 2-3 + 20 + 21) = -3,1875 g) minA+S4,4 = valA+S4,4(11111111) = -(23 - 2-4) = -7,9375 maxA+S4,4 = valA+S4,4(01111111) = 23 - 2-4 = 8 - 0,0625 = 7,9375 Tot n reprezentare A+S pe un octet, dar cu m = 4, intervalul reprezentabil este [-7,9375; 7,9375]. Sunt tot 255 numere reprezentabile, din 0,0625 n 0,0625. Operaiile n aritmetica A+S folosesc algoritmi de complexitate relativ mare. De exemplu, adunarea i scderea implic dou operaii distincte: - stabilirea semnului rezultatului (comparaie lexicografic) - implementarea algoritmilor uzuali de adunare/scdere manual Pe de alt parte, nmulirea i mprirea se realizeaz analog celor manuale.

IV.4.5. Reprezentarea n complement fa de 2


Fie baza de numeraie d > 1. Complementul unei cifre a {0,1,d-1} este cd(a) = (d 1) a. n cazul concret al bazei 2, pentru o cifr b {0,1}, c2(b) = (2 1) b = 1 b b . Odat stabilit noiunea de complement al unei cifre, se pune problema extinderea definiiei complementului la un ir de bii. Aceast extindere se poate face n dou moduri: - conform definiiei pentru un bit (complement fa de cifra maxim) C1(1011) = 0100 C1(0100) = 1011 - adaptnd definiia pentru iruri (complement fa de baza de numeraie) C2(1011) = 0100 0001 = 0101 C2(0101) = 1010 0001 = 1011 Reprezentarea n complement fa de 2 (deci fa de baz) este cel mai frecvent utilizat. Avantajele sale sunt posibilitatea de a efectua adunarea i scderea cu acelai algoritm (deci se poate folosi un circuit comun pentru implementarea ambelor operaii) i testarea automat a depirilor. Reprezentarea n complement fa de 2 se noteaz C2 i se definete astfel: a n-2 2 n-2 + ... + a -m 2-m pentru a n-1 = 0 m ( ) Valn, a a ...a a a ...a = A +S n -1 n -2 1 0 -1 -m n -2 -m n -1 pentru a n-1 = 1 a n-2 2 + ... + a -m 2 2

Deci, la fel ca la celelalte codificri n virgul fix, bitul cel mai semnificativ (a n-1) reprezint semnul. Tem: Demonstrai c numrul rezultat este ntotdeauna strict negativ pentru a n-1=1. Cele 2n+m reprezentri diferite (iruri diferite de bii) corespund la 2n+m numere diferite. Spre deosebire de reprezentarea cu modl i semn, cea n complement fa de 2 este neredundant: 0 = Val C2n+m (000) . Tem: Artai c 0 nu poate fi reprezentat ca numr negativ. Caracteristicile reprezentrii n complement fa de 2 sunt: - Cel mai mic numr reprezentabil este: minC2n,m = valC2n,m (100) = -2n-1 - Cel mai mare numr reprezentabil este: MaxC2n,m = valC2n,m (011) = 2n-1 - 2-m - Intervalul pe care se afl numerele reprezentabile este deci [-2n-1; +(2n-1-2-m)]. - Numerele reprezentabile exact sunt cele ncepnd cu min = -2n-1, cu pasul 2-m. Celelalte numere din interval se reprezint aproximativ, cu eroare de cel mult 2-m. Precizia reprezentrii este deci 2-m. Observaie: la fel ca n cazul reprezentrii cu modl i semn, pentru numere ntregi (m = 0), precizia este 1.

O alt asemnare cu reprezentarea cu modl i semn este c, pentru un numr de bii alocat reprezentrii (n+m) fixat, magnitudinea i precizia sunt cerine contradictorii: - creterea magnitudinii duce la o aproximare mai slab - o precizie mai bun duce la o magnitudine sczut Exemple: a) ValC28,0 (00110011) = 51 00110011 +(20 + 21 + 24 + 25) = 51 b) ValC26,2 (00110011) = 12,75 = 51 : 22 00110011 +(2-2 + 2-1 + 22 + 23) = 12,75 c) ValC24,4 (00110011) = 3,1875 = 51 : 24 00110011 +(2-4 + 2-3 + 20 + 21) = 3,1875 d) ValC28,0 (10110011) = - 77 10110011 (20 + 21 + 24 + 25) 27 = 51 128 = -77 e) minC28,0 = valC28,0(10000000) = 0 27 = 0 - 128 = -128 maxC28,0 = valC28,0(01111111) = 27-20 = 128 1 = 127 n reprezentare C2 pe un octet, numere ntregi (m = 0), intervalul reprezentabil este [-128; 127]. n acest mod se pot deci reprezenta 256 numere diferite, din 1 n 1. f) ValC24,4 (10110011) = - 4,8125 = -77 : 24 10110011 (2-4 + 2-3 + 20 + 21) 23 = 3,1875 8 = -4,8125 g) minC24,4 = valC24,4(10000000) = 0 - 23 = -8 = -128 : 24 maxC24,4 = valC24,4(01111111) = 23 - 2-4 = 8 - 0,0625 = 7,9375 = 127 : 24 Tot n reprezentare C2 pe un octet, dar cu m = 4, intervalul reprezentabil este [-8; 7,9375]. Sunt tot 256 numere reprezentabile, din 0,0625 n 0,0625. Spre deosebire de reprzentarea cu modl i semn, relaia dintre reprezentrile numerelor q i -q nu mai este evident. Totui, determinarea unei asemenea relaii este foarte important pentru eficiena reprezentrii; dac avem la dispoziie o metod de a afla reprezentarea lui q din reprezentarea lui q, atunci scderea p - q se poate exprima ca o operaie de adunare, dup generarea automat a reprezentrii lui q: p - q = p + (-q). Implicit, pentru adunare i scdere se poate folosi acelai circuit. Din fericire, o asemenea relaie exist: reprezentarea lui q este complementul fa de 2 al reprezentrii lui q. Exemplu: q = -77 = ValC28,0 (10110011) -q = 77 = ValC28,0 (0100110000000001) = ValC28,0 (01001101) = 64+8+4+1

Tem
- Artai c reprezentarea n C2 pe N bii a numrului ntreg negativ q este de fapt reprezentarea pe N bii a numrului q + 2N = 2N - |q|. - Artai c a + a = 11.11 -1, deci (- a) = a 1. n aceast expresie, a noteaz att numrul, ct i reprezentarea sa (se folosete aici implicit faptul c numerele pozitive se reprezint ca n baza 2), iar a noteaz negaia bit cu bit a reprezentrii numrului a.

IV.4.6. Reprezentarea n complement fa de 1


Este o reprezentare asemntoare cu C2, dar la decodificarea numerelor negative se adaug precizia. Reprezentarea n complement fa de 1 se noteaz C1 i se definete astfel: a n-2 2 n-2 + ... + a -m 2-m pentru a n-1 = 0 n,m ValA+S (a n-1a n-2 ...a1a 0a -1...a -m ) = n -2 -m n -1 -m pentru a n-1 = 1 a n-2 2 + ... + a -m 2 2 2

)(

Tem: Demonstrai c numrul rezultat este ntotdeauna negativ pentru an-1=1. Din nou, bitul cel mai semnificativ (an-1) reprezint semnul. Cele 2n+m reprezentri diferite (iruri diferite de bii) corespund la 2n+m-1 numere diferite. La fel ca n cazul A+S, reprezentarea n complement fa de 1 este redundant: 0 poate fi reprezentat i ca numr negativ (00...0 i respectiv 11...1). Alte caracteristic ale reprezentrii C1: - Cel mai mic numr reprezentabil este: minC1n,m = valC1n,m (100) = -(2n-1 - 2-m) - Cel mai mare numr reprezentabil este: MaxC1n,m = valC1n,m (011) = 2n-1 - 2-m

- Intervalul pe care se afl numerele reprezentabile este deci [-(2n-1 - 2-m) ; +(2n-1 - 2-m)]. Exemple: a) ValC18,0 (00110011) = 51 00110011 +(20 + 21 + 24 + 25) = 51 b) ValC16,2 (00110011) = 12,75 = 51 : 22 00110011 +(2-2 + 2-1 + 22 + 23) = 12,75 c) ValC14,4 (00110011) = 3,1875 = 51 : 24 00110011 +(2-4 + 2-3 + 20 + 21) = 3,1875 d) ValC18,0 (10110011) = -76 10110011 (20 + 21 + 24 + 25) - (27 - 20) = 51 - 127 = -76 e) minC18,0 = valC1 8,0(10000000) = 0 - (27 - 20) = 0 - 127 = - 127 maxC18,0 = valC1 8,0(01111111) = 27 - 20 = 128 - 1 = 127 n reprezentare C1 pe un octet, numere ntregi (m = 0), intervalul reprezentabil este [-127; 127]. n acest mod se pot deci reprezenta 255 numere diferite, din 1 n 1. f) ValC14,4 (10110011) = -4,75 = -76 : 24 10110011 (2-4 + 2-3 + 20 + 21) - (23 - 2-4) = 3,1875 - 7,9375 = -4,75 g) minC14,4 = valC14,4 (10000000) = 0 - (23 - 2-4) = 7,9375 = -127 : 24 maxC14,4 = valC14,4 (01111111) = 23 - 2-4 = 8 - 0,0625 = 7,9375 = 127 : 24 Tot n reprezentare C1 pe un octet, dar cu m = 4, intervalul reprezentabil este [-7,9375; 7,9375]. Sunt tot 255 numere reprezentabile, din 0,0625 n 0,0625. Similar reprezentrii C2, se pune problema determinrii automate a reprezentrii lui q pornind de la reprezentarea lui q. Obiectivul este acelai: transformarea operaiei de scdereaa p-q n adunare, dup generarea automat a reprezentrii lui q: p - q = p + (-q). n C1, reprezentarea lui q este complementul fa de 1 al reprezentrii lui q. Exemplu: q = -76 = ValC18,0 (10110011) q = 76 = ValC18,0 (01001100) = 64+8+4 Din cauza redundanei i a adunrii preciziei (n sum algebric, de dou ori), algoritmii de calcul n C 1 sunt mai puin eficieni dect cei n C2. Din acest motiv, reprezentarea cvasi-general utilizat este C 2.

Recapitulare: reprezentri n virgul fix, n=4, m=0


irul de bii A+S C2 C1 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 +0 +1 +2 +3 +4 +5 +6 +7 -0 -1 -2 -3 -4 -5 -6 -7 0 +1 +2 +3 +4 +5 +6 +7 -8 -7 -6 -5 -4 -3 -2 -1 +0 +1 +2 +3 +4 +5 +6 +7 -7 -6 -5 -4 -3 -2 -1 -0 XS-7 (Excess7) -7 -6 -5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5 +6 +7 +8

IV.4.7. Depiri pentru operaii cu reprezentri n virgul fix


Aa cum s-a vzut, domeniul reprezentabil depinde de lungimea reprezentrii, adic de numrul de bii alocai pentru partea ntreag i respectiv pentru partea fracionar. n aceste condiii, ets de interes studiul trecerii ntre reprezentri de acelai tip, dar de lungimi diferite.

Trecerea la reprezentri mai lungi se face prin adugare de cifre nesemnificative la partea ntreag. Ce nseamn cifr nesemnificativ? n reprezentarea prin modl i semn, se adaug zerouri imediat dup cifra semn (imediat la dreapta acesteia): ValA+S8,0 (00110011) = 51 ValA+S16,0 (0000000000110011) = 51 ValA+S8,0 (10110011) = -51 ValA+S16,0 (1000000000110011) = -51 n reprezentrile n complement fa de 2 i respectiv fa de 1, cifra de semn este repetat la stnga sa: ValC28,0(0110011) =51 ValC216,0(000000000110011) = 51 ValC28,0 (10110011) = -77 ValC216,0 (1111111110110011) = -77 ValC18,0 (10110011) = -76 ValC116,0 (1111111110110011) = -76 Intereseaz mai mult trecerea la reprezentri mai scurte, deoarece aceasta ridic o problem suplimentar: ncape reprezentarea corect a rezultatului pe n+m bii? n primul rnd, facem observaia c, indiferent de reprezentarea utilizat, mulimea numerelor reprezentabile este o submulime finit a mulimii numerelor raionale, pe care o vom nota Q repn,m, unde rep{A+S, C1, C2}. Dac notm cu min cel mai mic numr reprezentabil, iar cu Max cel mai mare numr reprezentabil, atunci evident Qrepn,m [min; Max]. Exemple: QC28,0 = {-128; -127; -126;-1; 0; 1; ...127} QC24,4 = {-8; -7,9375; -0,0625; 0; 0,0625; 7,9375} QA+Sn,m ={-(2n-1-2-m); -(2n-1-2-m+1); -(2n-1-3 2-m); -2-m; 0; +2-m; (2n-1-2-m)} Rezult imediat c Qrepn,m Qrepn+k,m , k=1,2, Cauza fundamental a apariiei depirilor este condiia ca termenii sumei i rezultatul s se reprezinte pe acelai numr de bii. Suma a dou numere cu acelai numr de bii are ns nevoie de un bit n plus fa de operanzi. De asemenea, nmulirea i mprirea ar trebui s aib, pentru reprezentarea rezultatului, o lungime dubl fa de lungimea comun a operanzilor. Mai general, dac avem dou numere a, b Qrepn,m , o operaie oarecare, notat op, produce depire dac a op b [min; Max]. Cu alte cuvinte, rezultatul operaiei este eronat, deoarece rezultatul corect nu este reprezentabil. Nu se poate produce depire la partea fracionar; aceasta poate fi responsabil doar de aproximare. Observm c noiunile de rezultat aproximativ i rezultat eronat sunt diferite. Dei problema depirilor se manifest indiferent de reprezentarea folosit, n continuare vom insista pe reprezentarea n complement fa de 2, care este cel mai des folosit n calculatoare. Exemple: a) n reprezentarea C2, cu n = 4, m = 0 : 1111 + 1111 = 11110 1110 Se "pierde" o cifr din rezultatul complet (rezultatul nu "ncape" pe 4 bii). Dac analizm ns mai atent reprezentrile implicate i numerele care le corespund, observm c: valC24,0(1111) = -1 (-1) + (-1) = -2 valC24,0(1110) = -2 Rezultatul "incomplet" este corect, deci de fapt nu se produce depire. Testarea depirii se poate face pe baza definiiei: QC24,0 [-8; 7] -1QC24,0 , -2 [-8; 7] b) n reprezentarea C2, cu n = 4, m = 0 : 0111 + 0111 = 1110 Dei nu se "pierde" nici o cifr, rezultatul obinut este eronat, deci se produce depire: valC24,0(0111) = 7 7 + 7 = 14 valC24,0(1110) = -2 14 La fel ca n exemplul anterior, testarea depirii se poate face pe baza definiiei: QC24,0 [-8; 7] 7QC24,0 , 14 [-8; 7] Calculatorul nu poate ns testa definiia, ntruct el cunoate reprezentrile, nu i numerele reprezentate. Privind ambele exemple de mai sus, vedem c, de fapt, cifra de transport de la rangul cel mai semnificativ (fie 0, fie 1) se pierde ntotdeauna din rezultat. Aceast cifr este reinut n indicatorul C (transport general), care exist practic n toate procesoarele. Transportul general nu este ns de folos pentru detectarea depirilor. Trebuie gsit o condiie asupra reprezentrilor care, testat, s semnaleze depirea. Mai mult, aa cum am vzut deja, condiia cutat nu poate s foloseasc definiia depirii, deoarece numerele nu sunt disponibile. Odat identificat o asemenea condiie, ea poate fi implementat printr-un circuit ataat sumatorului.

Pentru a determina condiia de depire, privim depirea la adunare dintr-un unghi diferit: se produce depire atunci i numai atunci cnd ambii operanzi au acelai semn, iar reprezentarea rezultatului indic semn opus. Tem a) Artai c nu este posibil ca definiia depirii (cu numere) s fie satisfcut cnd numerele au semn opus. b) Studiul adunrii reprezentrilor pentru cazurile: ambele numere pozitive, ambele numere negative. Concluzie.

Rezultate asupra sumei algebrice n C2


Teorema 1. Dac a, b QC2n,m , atunci a+b QC2n+1,m. Lema 2. Dac a= ValC2n+1,m (nn-1.10-1..-m), cu n = n-1, atunci: a= ValC2n,m (n-1n-2.10-1..-m) Definiie. Fiind date reprezentrile i , = n-1.10-1..-m i = n-1. 1 0 -1.. -m (i , i {0,1}), suma lor formal = + este: = n n-1 1 0 -1 -m , unde i=-m = i = -m Teorema 3. Dac suma algebric a numerelor reprezentate de i nu produce depire, atunci reprezentarea rezultatului este: n-1 1 0 -1 -m Consecin. Sumatorul serial, n care bitul de semn se adun ca oricare alt cifr, efectueaz adunri corecte. Teorema 4. Suma algebric a numerelor reprezentate de i nu produce depire dac cifrele transport Cn-1 i Cn coincid. 1111 + 1111 : cifrele-transport C3 i C4 sunt identice (egale cu 1). 0111 + 0111 : cifrele-transport C3 i C4 difer (prima este 1, a doua este 0). Consecin: Testarea depirii n UAL se poate face prin adugarea la sumatorul serial a unei pori NXOR, n care intr cifrele-transport Cn-1 i Cn i din care iese bitul-flag O (overflow). Cifra-transport Cn poziioneaz i bitul-flag C (carry). (
n i

2i

) ((
n

+ i ) 2i

IV.4.8. Reprezentarea numerelor reale: aritmetica n virgul mobil


Reprezentrile n virgul fix nu sunt potrivite pentru numere reale. Adevrata lor utilitate const n reprezentarea numerelor ntregi. n momentul n care apare i partea fracionar, nu mai pot fi satisfcute simultan cerinele contradictorii legate de magnitudinea i respectiv precizia reprezentrii. Aa cum s-a vzut deja, pentru o lungime a numrului de bii (n+m) fixat, creterea magnitudinii nrutete precizia i reciproc. n virgul mobil, un numr se reprezint printr-o pereche de reprezentri n virgul fix, permind reprezentarea simultan de numere cu magnitudini i precizii diferite. Reprezentarea n virgul mobil se bazeaz pe notaia tiinific, n care se folosete exponentul bazei de numeraie. De exemplu, 55312.1784(10) 10-105 ar necesita 110 cifre n scriere poziional, n timp ce n notaia tiinific se folosesc doar 14 (baza de numeraie este implicit, deci nu mai trebuie scris). O problem potenial se refer la existena mai multor scrieri posibile pentru acelai numr. De exemplu, 0.00000083(10) 104 se poate scrie i n forma 0.0083, eliminnd zerourile semnificative; evident, exist i alte forme, care difer prin numrul de zerouri dup virgul i valoarea exponentului. Din acest motiv notaia tiinific impune o regul suplimentar, anume ca la stnga virgulei s se afle o singur cifr: 0.031056(10) 107 Chiar i aa, nc mai sunt posibile mai multe variante pentru scrierea aceluiai numr: m1 Be = m2 Be+k , unde m2 = m1 / B-k , pt. oricare k Z Problema este rezolvat complet prin folosirea scrierii normalizate, care este o reprezentare n notaie tiinific fr prefix de zerouri semnificative. Cu alte cuvinte, nu numai c o singur cifr se poate afla la stnga virgulei, dar aceast cifr trebuie s fie nenul. (Excepie face, evident, reprezentarea numrului 0.) Exemplu: 6.15(10) 10-75 n scriere poziional ar fi fost necesare 78 cifre semnificative, dintre care 75 zerouri. Esenial este proprietatea reprezentrii normalizate de a fi unic pentru un numr dat. n terminologia notaiei tiinifice, termenul din stnga al produsului (6.15 n exemplul de mai sus) se numete mantis, iar exponentul de la termenul din dreapta (-75) poart chiar denumirea de exponent. Aceste

dou componente sunt indispensabile pentru reprezentarea n notaie tiinific (la fel este i baza de numeraie, dar, cum am artat deja, aceasta este implicit). n notaia tiinific n binar, cifra de la stnga virgulei este 1, deoarece aceasta este singura valoare nenul n baza 2: 1.101(2) 2 2 Din nou, reprezentarea numrului 0 face excepie (ntruct acesta nu conine nici o cifr 1), necesitnd o definire special. Pentru oricare alt numr reprezentabil, cel mai semnificativ 1 trebuie s devin singura cifr de la partea ntreag, ceea ce, n general, altereaz exponentul lui 2. Reprezentrile n virgul mobil n calculator constau din trei pri: - Semnul (S), care este reprezentat pe 1 bit, n aceai convenie ca la reprezentrile n virgul fix: 0 pentru numr pozitiv, 1 pentru numr negativ. - Partea fracionar (f); mantisa este 1+f, deci f este de fapt partea fracionar a mantisei (fr cifra 1 de la stnga virgulei). Mantisa are 1+23 (sau 1+52) bii, n funcie de standardul folosit. Cifra de la stnga virgulei nu este memorat pentru c are ntotdeauna valoarea 1, deci este cunoscut implicit. - Caracteristica C, derivat din exponent. Dimensiunea sa este de 8 sau 11 bii. Caracteristica este o reprezentare n exces a exponentului. Dac se folosesc k bii pentru caracteristic, atunci excesul este 2k-1 - 1. S-a preferat o reprezentare de acest tip n locul uneia n complement fa de 2 (care este cel mai des folosit pentru numere ntregi) deoarece operaia de comparaie este mai uor de realizat pe reprezentrile n exces. n practic, operaiile de comparaie apar mai des dect cele de adunare/scdere atunci cnd se lucreaz cu exponeni. Relaia ntre caracteristic i exponent este deci: C = exponent + exces n final, reprezentarea n virgul mobil a unui numr x este format din semn, parte fracionar (f) i caracteristic (C), astfel nct: x = (+/-) 1.f BCexces B este baza de numeraie (2) i se subnelege, deci nu se reprezint explicit. Figura de mai jos arat limitele unei reprezentri n virgul mobil:

O figur similar pentru numerele reprezentabile n virgul fix ar indica un singur interval coninnd numere reprezentabile, simetric fa de 0 i cu cele dou capete aflate fiecare ntr-unul din intervalele figurate aici cu verde. Standardizarea este esenial pentru portabilitate i pentru ataarea unei semantici generale a reprezentrii n virgul mobil. Procesul a nceput n 1977 i s-a ncheiat parial n 1985. Prima implementare comercial a standardului IEEE (pe atunci n curs de elaborare) a fost realizat n 1981, n circuitul Intel 8087 (corpocesorul matematic al microprocesoarelor Intel 8086 i 8088). Standardul IEEE 754/1985 definete dou variante ale reprezentrii n virgul mobil: - precizie simpl - precizie dubl Ambele variante au la baz principiile enunate mai sus, diferind doar prin numrul de bii alocat fiecrui cmp din reprezentare. Astfel, n precizie simpl, caracteristica are 8 bii, iar partea fracionar 23 bii. Adugnd i bitul de semn, rezult o dimensiune total de 32 bii (4 octei). n limbajele C i C++, reprezentarea n precizie simpl se ntlnete sub forma tipului float.

Reprezentarea n precizie dubl aloc 11 bii pentru caracteristic i 52 pentru partea fracionar, permind astfel reprezentarea numerelor cu magnitudine mai mare i precizie mai bun. Tipul de date corespunztor n C/C++ este double (64 bii).

Indiferent de varianta folosit, n virgul mobil pasul reprezentrii (distana ntre dou numere reprezentabile succesive) nu este constant, ci depinde de valoarea exponentului. Analiznd reprezentarea n virgul mobil, observm c este compus din dou reprezentri n virgul fix. Mantisa are o reprezentare prin cantitate i semn (A+S); bitul de semn este aici asociat mantisei, ceea ce este de fapt natural. n acelai timp, caracteristica este o reprezentare n exces a exponentului. Exist deci o valoare minim emin i una maxim emax pentru exponent, de unde structura mulimii numerelor reprezentabile. Ordinea din reprezentare (S C f) faciliteaz compararea reprezentrilor; ordinea numerelor reprezentate coincide astfel cu ordinea lexicografic a reprezentrilor. Urmtorul tabel prezint cteva proprieti ale reprezentrilor n norma IEEE 754: Precizie simpl Precizie dubl Bii "precizie" 24 53 128 1024 Exponent maxim (pentru numere: 127) (pentru numere: 1023) -127 -1023 Exponent minim (pentru numere normalizate: -126) (pentru numere normalizate: -1022) Exces (exponent) 127 1023 Valoare maxim (n aproximativ 3.4 1038 aproximativ 1.7 10308 modul) Valoare minim (n aproximativ 1.2 10-38 aproximativ 2.2 10-308 modul) nenul Exemple: a) Cum se reprezint numrul -7 n virgul mobil simpl precizie (IEEE 754) ? - Semnul: minus, deci 1 - Trecere n baza 2: 7(10) = 111(2) - Normalizare: 111(2) = 1.11(2) 22 exponent: 2 - Calculul caracteristicii (pe 8 bii): (2 + 127)(10)= 129(10) = 10000001(2) - Reprezentarea: 1 10000001 11000000000000000000000(2) Pentru comoditate i uurina manipulrii, reprezentrile se pot scrie n baza 16 (hexazecimal) n locul bazei 2. Reamintim c fiecrei combinaii de 4 cifre n baza 2 i corespunde n mod unic o cifr n baza 16. Ca urmare, reprezentarea n precizie simpl va avea exact 8 cifre n baza 16. Pentru exemplul de mai sus: C0E00000(16) b) Cum se scrie poziional n baza zece numrul reprezentat n simpl precizie IEEE 754 prin C1F00000(16)? - Scriere n binar: C1F00000(16) = 1100 0001 1111 0000 0000 0000 0000 0000(2) - Semn: 1, deci - (numr negativ) - Caracteristica: 10000011(2) = 131(10) - Exponentul: 131 - 127 = 4 Mantisa: (1 + 0.111 )(2) = 1.111(2) Valoarea: -1.111 24 = -11110(2) = -30(10)

Aritmetica extins
Aritmetica real uzual este proiectat pe mulimea numerelor reale reprezentabile i folosete operaiile uzuale. n lucrul cu reprezentrile n virgul mobil, restriciile care apar impun definirea unor reguli noi, care se adaug celor deja existente. Aceste reguli noi se refer la: - reprezentare pentru i reguli elementare de calcul cu acesta (tratarea cazurilr de genul x/ , +) - reprezentri pentru rezultatul operaiilor nedefinite (NaN - Not a Number) i reguli de propagare a acestuia (NaN op x = NaN)

Ca un exemplu pentru necesitatea tratrii acestor situaii, considerm calculul funciei arccos. n acest scop vom folosi formula: arccos(x) = 2 arctan(sqrt((1-x)/(1+x))) Se pune problema determinrii valorii arccos(-1). Se observ imediat c aplicarea formulei de mai sus va duce la efectuarea unei mpriri la 0, ceea ce n mod normal ar produce eroare. Totui, introducerea regulilor suplimentare ale aritmeticii extinse permite efectuarea calculului n modul urmtor 1+x = 0 2/(1+x) = arctan(sqrt((1-x)/(1+x))) = arctan(sqrt()) = arctan() = /2 arccos(x) = n final se obine deci rezultatul corect: arccos (-1) = . Fr ajutorul aritmeticii extinse, obinerea acestui rezultat nu ar fi fost posibil. Aceste relaii fac parte din aritmetica n virgul mobil, definit n standardul IEEE 754. Acesta definete urmtoarele tipuri de valori n virgul mobil: Tip valoare e f Valoare (-1)S 1.f normalizat emin < e < emax f oarecare 2e S (-1) 0.f denormalizat e = emin f0 2e zero e=0 f=0 S0 infinit e = emax f=0 S NaN e = emax f0 NaN Valorile de tip valoare normalizat corespund aritmeticii clasice. Toate celelalte sunt specifice aritmeticii extinse.

Depiri
Date fiind limite reprezentrii n virgul mobil, exist dou tipuri de depire care pot aprea: - Depire inferioar: n forma normalizat a numrului, exponentul negativ nu poate fi reprezentat n cmpul caracteristicii. Un numr aflat n aceast situaie va fi considerat 0, dei este nenul. - Depire superioar: n forma normalizat a numrului, exponentul pozitiv este prea mare pentru a putea fi reprezentat n cmpul caracteristicii. Un asemenea numr va fi considerat .

Aritmetica n virgul mobil


n cazul cel mai general, fie dou numere x = xm 2xe i y = ym 2ye, unde xm i respectiv ym sunt mantisele numerelor x i y, iar xe i ye exponenii acestora. Dup cum se vede, pentru nceput ne vom referi la notaia tiinific, nu la reprezentarea n standard IEEE. n notaie tiinific sunt valabile relaiile de mai jos: x + y = (xm 2xe-ye + ym) 2ye, dac xe ye x - y = (xm 2xe-ye - ym) 2ye, dac xe ye x y = (xm ym) 2xe+ye x : y = (xm ym) 2xe-ye Aceste relaii se pot aplica i n reprezentarea n virgul mobil. Implementarea lor este ns mai complicat dect o arat formulele. Considerm operaia de adunare n virgul mobil. Paii n care se efectueaz operaia sunt: 1. Se compar exponenii termenilor adunrii. Dac acetia sunt diferii, atunci partea fracionar a numrului mai mic se deplaseaz spre dreapta (denormalizare!) pn cnd exponentul su devine egal cu exponentul mai mare 2. Se adun mantisele. Aici se decide i semnul sumei. Adunarea mantiselor se efectueaz n complement fa de 2. Deci, pentru numere negative se face complementarea corespunztoare, iar rezultatul (dac este negativ) se complementeaz pentru a reveni la reprezentarea A+S. 3. Dac este nevoie, se normalizeaz suma, fie decalnd rezultatul spre dreapta i incrementnd exponentul, fie decalnd spre stnga i decrementnd exponentul. 4. Dac se poduce depire excepie stop. 5. Rotunjete mantisa la numrul permis de bii. Dac astfel s-a produs denormalizare, reia de la 3. 6. Stop.

Tem
S se urmreasc paii adunrii n virgul mobil pentru reprezentrile numerelor scrise n baza zece ca 0,75 i -0,375. Se va considera c semnul, exponentul i mantisa sunt obinute ca pentru IEEE 754, dar se reprezint pe 1 bit, 8 bii, respectiv 4 bii.

Vom considera acum nmulirea n virgul mobil. n mod aparent paradoxal, procedura de calcul, dei diferit de cea de la adunare, nu este mai complicat (xplicaia const n faptul c notaia tiinific, bazat pe lucrul cu exponeni, se preteaz mai bine la operaii de nmulire dect de adunare): 1. Se calculeaz exponentul rezultatului, adunnd exponenii celor doi factori. Mai precis, se adun caracteristicile i se scade excesul. 2. Se nmulesc mantisele. 3. Se normalizeaz rezultatul. Dac se produce depire excepie stop. 4. Se fac rotunjirile necesare. Dac se produce denormalizare, reia de la 3. 5. Se determin semnul rezultatului. 6. Stop.

Tem
S se urmreasc paii nmulirii n virgul mobil pentru reprezentrile numerelor scrise n baza zece ca 0,75 i 0,375. Reprezentrile sunt cele din standardul IEEE 754.