Documente Academic
Documente Profesional
Documente Cultură
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.
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
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).
( )
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)
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
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.
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.
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.
)(
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.
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.
2i
) ((
n
+ i ) 2i
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 .
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.