560 likes | 734 Views
Operaţii A+S. Algoritmi de complexitate relativ mare Adunare / scădere Stabilirea semnului rezultatului (comparaţie lexicografică) Implementarea algoritmilor uzuali de adunare / scădere manuală Incluzând “împrumuturi” etc. Înmulţirea / împărţirea – analog celor manuale.
E N D
Operaţii A+S • Algoritmi de complexitate relativ mare • Adunare / scădere • Stabilirea semnului rezultatului (comparaţie lexicografică) • Implementarea algoritmilor uzuali de adunare / scădere manuală • Incluzând “împrumuturi” etc. • Înmulţirea / împărţirea – analog celor manuale
Complement • Fie baza d > 1. • Complementul unei cifre: • Pentru o cifră a {0,1,…d-1} cd(a) = (d – 1) – a • Pentru d = 2 şi b {0,1} : c2(b) = (2 – 1) – b = 1 – b b • Dar complementul unui şir de biţi ?
Complement faţă de bază şi faţă de cifra maximă • Extinderea definiţiei complementului la un şir de biţi se poate face în două moduri: • Conform definiţiei pentru un bit (complement faţă de cifra maximă) • C1(1011) = 0100 C1(0100) = 1011 • Adaptând definiţia pentru şiruri (complement faţă de bază). • C2(1011) = 0100 0001 = 0101 • C2(0101) = 1010 0001 = 1011
Reprezentarea încomplement faţă de 2 • Cel mai frecvent utilizată • Adunarea şi scăderea cu acelaşi algoritm / circuit • Testarea automată a depăşirilor
C2 - definiţie • Complement faţă de 2: C2 • ValC2n,m (an-1an-2….a1a0a-1…..a-m) = an-2 × 2n-2 +…+ a-m × 2-m, dacă an-1 = 0 (an-2 × 2n-2 +…+ a-m × 2-m) – 2n-1, dacă an-1 = 1 • Temă: strict negativ pentru an-1=1. • Deci, an-1 reprezintă semnul.
Reprezentarea încomplement faţă de 2 • Cele 2n+m reprezentări diferite (şiruri diferite de biţi) corespund la 2n+m numere diferite. • Neredundantă: 0= ValC2n+m (00…0) • Temă: 0 nu poate fi reprezentat ca număr negativ. • Cel mai mic număr reprezentabil este minC2n,m = valC2n,m (10…0) = - 2n-1 • Cel mai mare număr reprezentabil este MaxC2n,m = valC2n,m (01…1) = 2n-1-2-m • Intervalul pe care se află numerele reprezentabile este deci [- 2n-1; + (2n-1-2-m)].
Reprezentarea încomplement faţă de 2 • Numerele reprezentabile exact sunt cele începând cu min = -2n-1, cu pasul 2-m. • Celelalte numere din interval se reprezintă aproximativ, cu eroare de cel mult 2-m. • Precizia reprezentării este 2-m. • Pentru numere întregi, m=0, deci precizia este 1. • Pentru n+m fixat • creşterea magnitudinii duce la aproximare mai slabă • Precizie mai bună duce la magnitudine scăzută
Reprezentarea în complement faţă de 2 • ValC28,0 (00110011) = 51 • 00110011 + (20 + 21 + 24 + 25) = 51 • ValC26,2 (00110011) = 12,75 = 51 : 22 • 00110011 + (2-2 + 2-1 + 22 + 23) = 12,75 • ValC24,4 (00110011) = 3,1875 = 51 : 24 • 00110011 + (2-4 + 2-3 + 20 + 21) = 3,1875
Reprezentarea în complement faţă de 2 • ValC28,0 (10110011) = - 77 • 10110011 (20 + 21 + 24 + 25) – 27 = 51 – 128 = -77 • minC28,0 = valC28,0(10000000) = 0 – 27 = 0 - 128 = - 128 • maxC28,0 = valC28,0(01111111) = 27-20 = 128 – 1 = 127 • [-128; 127] 256 numere, din 1 în 1. • ValC24,4 (10110011) = - 4,8125 = -77 : 24 • 10110011 (2-4 + 2-3 + 20 + 21) – 23= 3,1875 – 8 = = - 4,8125 • 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 • [-8; 7,9375] 256 numere din 0,0625 în 0,0625.
C2 - complementare • Dată reprezentarea lui q, se poate afla automat reprezentarea lui –q? • Dacă da, atunci scăderea p-q devine adunare, după generarea automată a reprezentării lui –q: p - q = p + (-q) • Reprezentarea lui –q: complementul faţă de 2 al reprezentării lui q. • Exemplu: q = - 77 = ValC28,0 (10110011) • -q = 77 = ValC28,0 (0100110000000001) = ValC28,0 (01001101) = 64+8+4+1.
Temă • Reprezentarea în C2 pe N biţi a numărului întreg negativ q este de fapt reprezentarea pe N biţi a numărului q + 2N = 2N - |q| • a + a = 11….11 -1, deci (- a) = a 1 • a notează negaţia bit cu bit a reprezentării numărului a. • a notează atât numărul, cât şi reprezentarea sa; se foloseşte aici implicit faptul că numerele pozitive se reprezintă ca în baza 2.
Reprezentarea încomplement faţă de 1 • Asemănătoare cu C2, dar la decodificarea numerelor negative se adaugă precizia. • Complement faţă de 1: C1 • ValC1n,m (an-1an-2….a1a0a-1…..a-m) = an-2 × 2n-2 +…+ a-m × 2-m, dacă an-1 = 0 (an-2 × 2n-2 +…+ a-m × 2-m) – (2n-1 – 2-m), dacă an-1 = 1 • Temă: negativ pentru an-1=1. • Deci, an-1 reprezintă semnul.
Reprezentarea încomplement faţă de 1 • Cele 2n+m reprezentări diferite (şiruri diferite de biţi) corespund la 2n+m-1 numere diferite. • Redundantă: 0 poate fi reprezentat şi ca număr negativ. • Cel mai mic număr reprezentabil este minC1n,m = valC1n,m (10…0) = - (2n-1 – 2-m) • Cel mai mare număr reprezentabil este MaxC1n,m = valC1n,m (01…1) = 2n-1-2-m • Intervalul pe care se află numerele reprezentabile este deci [-(2n-1-2-m) ; + (2n-1-2-m)].
Reprezentarea încomplement faţă de 1 • ValC18,0 (00110011) = 51 • 00110011 + (20 + 21 + 24 + 25) = 51 • ValC16,2 (00110011) = 12,75 = 51 : 22 • 00110011 + (2-2 + 2-1 + 22 + 23) = 12,75 • ValC14,4 (00110011) = 3,1875 = 51 : 24 • 00110011 + (2-4 + 2-3 + 20 + 21) = 3,1875
Reprezentarea încomplement faţă de 1 • ValC18,0 (10110011) = - 76 • 10110011 (20 + 21 + 24 + 25) – (27 – 20) = 51 – 127 = -76 • minC18,0 = valC18,0(10000000) = 0 – (27 – 20) = 0 - 127 = - 127 • maxC18,0 = valC18,0(01111111) = 27-20 = 128 – 1 = 127 • [-127; 127] 255 numere, din 1 în 1. • ValC14,4 (10110011) = - 4,75 = -76 : 24 • 10110011 (2-4 + 2-3 + 20 + 21) – (23-2-4) = 3,1875 – 7,9375 = = - 4,75 • 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 • [-7,9375; 7,9375] 255 numere din 0,0625 în 0,0625.
C1 - complementare • Dată reprezentarea lui q, se poate afla automat reprezentarea lui –q? • Dacă da, atunci scăderea p-q devine adunare, după generarea automată a reprezentării lui –q: p - q = p + (-q) • Reprezentarea lui –q: complementul faţă de 1 al reprezentării lui q. • Exemplu: q = - 76 = ValC18,0 (10110011) • q = 76 = ValC18,0 (01001100) = 64+8+4. • Din cauza redundanţei şi a adunării preciziei (în sumă algebrică, de două ori), algoritmii de calcul în C1 sunt mai puţin eficienţi decât cei în C2. • De aceea, reprezentarea cvasi-general utilizată este C2.
Reprezentări în virgulă fixă, 4,0 şirul de biţi A+S C2 C1 XS-7 0000 +0 0 +0 -7 0001 +1 +1 +1 -6 0010 +2 +2 +2 -5 0011 +3 +3 +3 -4 0100 +4 +4 +4 -3 0101 +5 +5 +5 -2 0110 +6 +6 +6 -1 0111 +7 +7 +7 0 1000 -0 -8 -7 +1 1001 -1 -7 -6 +2 1010 -2 -6 -5 +3 1011 -3 -5 -4 +4 1100 -4 -4 -3 +5 1101 -5 -3 -2 +6 1110 -6 -2 -1 +7 1111 -7 -1 -0 +8
&IV.4.7.Depăşiri pentru operaţii cu reprezentări în virgulă fixă
Trecerea la reprezentări mai lungi • Adăugare de cifre nesemnificative la partea întreagă • Ce înseamnă cifră nesemnificativă ? • A+S: zerouri imediat după cifra semn • ValA+S 8,0 (00110011) = 51 • ValA+S 16,0 (0000000000110011) = 51 • ValA+S 8,0 (10110011) = - 51 • ValA+S 16,0 (1000000000110011) = - 51 • C2, C1: repetări ale cifrei semn imediat după ea • ValC28,0(0110011) =51= ValC216,0(000000000110011). • ValC28,0 (10110011) = -77 • ValC216,0 (1111111110110011) = - 77 • ValC18,0 (10110011) = - 76 • ValC116,0 (1111111110110011) = - 76
Interesează mai mult trecerea la reprezentări mai scurte: încape reprezentarea corectă a rezultatului pe n+m biţi ?
Mulţimea numerelor reprezentabile • Submulţime finită a mulţimii numerelor raţionale • Qrepn,m , unde rep{A+S, C1, C2} • Qrepn,m [min; Max] • 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)} • Qrepn,m Qrepn+k,m, k=1,2,…
Importanţa reprezentării în complement faţă de 2 (*) • Cel mai simplu circuit de adunare a două reprezentări: sumator complet la fiecare rang şi ignorarea transportului de la rangul cel mai semnificativ. • Temă: adunarea în C1 implică o operaţie suplimentară. • Testare simplă a depăşirilor. • Un număr în plus reprezentat pe aceeaşi lungime (reprezentare neredundantă).
Operaţii în C2 (*) • Vom prezenta pe scurt doar proprietăţi ale adunării şi scăderii (suma algebrică) în C2. • Termenii sumei şi rezultatul se reprezintă pe acelaşi număr de biţi • Uneori această restricţie cauzează depăşiri • Înmulţirea şi împărţirea ar trebui să aibă, pentru reprezentarea rezultatului, o lungime dublă faţă de lungimea comună a operanzilor. • Aceeaşi definiţie a depăşirii
Depăşiri • Fie rep o reprezentare şi op o operaţie cu numere, iar op operaţia corespunzătoare cu reprezentări rep. Fie a, b Qrepn,m . • Spunem că operaţia op aplicată numerelor a şi b produce depăşire dacă: a op b [min; Max] • Este una din situaţiile repr(n1) op repr(n2) repr (n1 op n2) • Anume, eroare la partea întreagă • Depăşire înseamnă rezultat eronat • Nu se poate produce depăşire la partea fracţionară • ci doar aproximare (rezultat aproximativ, nu eronat)
Depăşire – exemplul 1 • În reprezentarea C2 , cu n = 4, m = 0 : • 1111 1111 = 11110 1110 • Se “pierde” o cifră (rezultatul nu “încape” pe 4 biţi) • valC24,0(1111) = -1 • (-1) + (-1) = -2 • valC24,0(1110) = -2 • Rezultat corect, deci nu se produce depăşire • Testarea depăşirii cu definiţia: • QC24,0 [-8; 7]. -1QC24,0 . -2 [-8; 7]. • Calculatorul nu poate însă testa definiţia, întrucât “ştie” reprezentările, nu numerele reprezentate
Depăşire – exemplul 2 • În reprezentarea C2 , cu n = 4, m = 0 : • 0111 0111 = 1110 • Nu se “pierde” nici o cifră • valC24,0(0111) = 7 • 7 + 7 = 14 • valC24,0(1110) = -2 • Rezultat eronat, deci se produce depăşire • Testarea depăşirii cu definiţia: • QC24,0 [-8; 7]. 7QC24,0 . 14 [-8; 7]. • Calculatorul nu poate însă testa definiţia, întrucât nu “ştie” numerele reprezentate
Depşirea la adunare în C2 • De fapt, cifra de transport de la rangul cel mai semnificativ (fie 0, fie 1) se pierde întotdeauna din rezultat • dar se reţine în indicatorul C (transport general) • Trebuie găsită o condiţie asupra reprezentărilor care, testată, să semnaleze depăşirea • Fără a folosi definiţia -numerele nu sunt disponibile • Testarea va fi făcută de un circuit ataşat sumatorului
Condiţia de depăşire • Un alt mod de a vedea depăşirea la adunare: • Depăşire se produce numai atunci când ambii operanzi au acelaşi semn, iar reprezentarea rezultatului indică semn opus. • Temă: • Nu este posibil ca definiţia depăşirii (cu numere) să fie satisfăcută când numerele au semn opus. • Studiul adunării reprezentărilor pentru cazurile: ambele numere pozitive, ambele numere negative. Concluzie.
Rezultate asuprasumei 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),
Rezultate asupra sumei algebrice în C2 (*) • Definiţie. Date reprezentările şi , = n-1….10-1…..-m şi = n-1….10-1…..-m (i ,i {0,1}), suma lor formală = este = n n-1 …10 -1… -m , unde i=-mn (i × 2i) = i=-mn-1 ( (i i)× 2i ) • Teorema 3. Dacă suma algebrică a numerelor reprezentate de şi nu produce depăşire, atunci reprezentarea rezultatului este n-1 …10 -1… -m . • Consecinţă: sumatorul serial efectuează adunări corecte • semnul se adună ca oricare altă cifră.
Testarea depăşirii • Teorema 4. • Suma algebrică a numerelor reprezentate de şi nu produce depăşire 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 depăşirii în UAL prin adăugarea la sumatorul serial a unei porţi NXOR • în care intră cifrele-transport Cn-1 şi Cn • şi din care iese bitul-flag O (overflow) • Cifra-transport Cn poziţionează şi bitul-flag C (carry).
&IV.4.8.Reprezentareanumerelor reale:aritmetica în virgulă mobilă
Reprezentarea în virgulă mobilă (*) • Reprezentările în virgulă fixă nu sunt potrivite pentru numere reale • Dualitatea magnitudine / precizie • lungimea n+m fixată • Creşterea magnitudinii înrăutăţeşte precizia şi reciproc • Virgulă mobilă: un număr se reprezintă printr-o pereche de reprezentări în virgulă fixă • Permiţând reprezentarea simultană de numere cu magnitudini şi precizii diferite
Notaţia ştiinţifică; normalizare (*) • Exemple • 7.015791043…zece • scriere poziţională • 55312.1784zece X 10 -105 • ar necesita 110 cifre în scriere poziţională, doar 14 aici. • 0.00000083zece X 10 4 • Se poate scrie şi eliminând zerourile semnificative • Numeroase scrieri posibile pentru acelaşi număr • Notaţia ştiinţifică: • o singură cifră la stânga virgulei • 0.031056zece X 10 7 • Încă numeroase scrieri posibile pentru acelaşi număr • m1 X Be1 = m2 X Be1+k , unde m2 = m1 / B-k , pt. oricare k Z. • Scriere normalizată: reprezentare în notaţie ştiinţifică fără prefix de zerouri semnificative • 6.15zece X 10 -75 • Poziţional 78 de cifre semnificative, dintre care 75 zerouri. • Unică pentru un număr dat.
Notaţia ştiinţifică în binar • 1.101doi X 2 2 • 6,5zece • 1.xxx…xdoi X 2 yyy • În binar, doar numărul 0 nu conţine nici o cifră 1 • Definire specială a reprezentării lui 0. • Pentru oricare alt număr reprezentabil, cel mai semnificativ 1 trebuie să devină singura cifră de la partea întreagă • Ceea ce, în general, alterează exponentul lui 2.
Reprezentări în virgulă mobilă • Semnul S: 0 sau 1 • 1 bit • Partea fracţionară f ; mantisa este 1+f • mantisa are 1+23 (sau 1+52) biţi • Caracteristica C • k=8 sau k=11 biţi. exces = 2k-1 – 1 • c = exponent + exces. • x = ( +/- ) 1.f B c – exces • Primul 1 şi baza 2 se subînţeleg/nu se reprezintă • O figură similară pentru numerele reprezentabile în virgulă fixă ar indica un singur interval conţinând numere reprezentabile, simetric faţă de 0 şi cu cele două capete aflate fiecare într-unul din intervalele figurate aici cu verde. Interval conţinând numerele pozitive reprezentabile Interval conţinând numerele negative reprezentabile zero Depăşire superioară exponent Depăşire inferioară exponent Depăşire superioară exponent
Standardizare • Esenţială pentru portabilitate şi pentru ataşarea unei semantici generale a reprezentării în virgulă mobilă. • Proces început în 1977, încheiat parţial în 1985. • W. Kahan (University of Toronto) • Prima implementare comercială a standardului IEEE (pe atunci, în curs de elaborare): 1981 - Intel 8087.
0 1 8 9 31 c = caracteristică f = partea fracţionară a mantisei s Standardul IEEE 754 / 1985 • Precizie simplă: • Interesează nu doar structura reprezentării, ci mai ales operaţiile ce se pot efectua cu reprezentări. • Exemple: • Compararea: reprezentarea în XS are avantajul inducerii ordinii naturale pe mulţimea reprezentării exponenţilor. • Înmulţirea: adunarea exponenţilor la înmulţire – cu scăderea excesului! • Precizie simplă: float în C/C++ (32 biţi)
Precizie dublă • Precizie dublă: double în C/C++ (64 biţi) 20 1 11 0 31 s exponent + 1023 f = partea fracţionară a mantisei continuarea părţii fracţionare a mantisei 0 31 32 Margini în baza 10: 2.0 X 10 -308 2.0 X 10 308 Faţă de precizia simplă: - Creşte intervalul pentru exponent - La exponent egal, creşte acurateţea (precizia) reprezentării datorită lungimii mai mari a părţii fracţionare a mantisei
Două reprezentări în virgulă fixă = o reprezentare în virgulă mobilă • Mantisa: reprezentare cantitate şi semn (A+S) a coeficientului puterii bazei • Caracteristica: reprezentare în exces a exponentului.
Există deci o valoare minimă emin şi una maximă emax pentru exponent • De unde structura mulţimii numerelor reprezentabile • Ordinea din reprezentare (S C f) facilitează compararea reprezentărilor • ordinea numerelor reprezentate coincide astfel cu ordinea lexicografică a reprezentărilor
Un exemplu • Cum se reprezintă numărul -7 în virgulă mobilă simplă precizie (IEEE 754) ? • Semnul: minus, deci 1 • Trecere în baza 2: 7zece = 111doi • Normalizare: 111doi = 1.11doi × 22zece • Calculul caracteristicii (pe 8 biţi) : ( 2 + 127)zece= 129zece = 10000001doi • Reprezentarea: 1100.0000.1110.0000.0000.0000.0000.0000doi C0E00000hexazecimal
Încă un exemplu • Cum se scrie poziţional în baza zece numărul reprezentat în simplă precizie IEEE 754 prin C1F00000 hexazecimal ? • Scriere în binar: C1F00000hexazecimal = 1100 0001 1111 0000 0000 0000 0000 0000doi • Semn:1, deci – (număr negativ) • Caracteristica:10000011doi = 131zece • Exponentul: 131 – 127 = 4 • Mantisa: (1 + 0,111 )doi = 1,111doi • Valoarea:-1,111× 24 = -11110doi = -30zece
Aritmetica extinsă (principii) • Aritmetica reală uzuală • Proiectată pe mulţimea numerelor reale reprezentabile • Cu operaţiile uzuale • La care se adaugă: • Reprezentare pentru şi reguli elementare de calcul cu acesta (a / , + ) • Reprezentări pentru rezultatul operaţiilor nedefinite (NaN) şi reguli de propagare a acestuia (NaN op x = NaN)
Aritmetica extinsă - exemplu • Calculul lui arccos cu formula: arccos (x) = 2arctan sqrt ( (1-x) / (1+x) ) • arccos(-1) = ? • 1+x 0 2 / (1+x) arctan((1-x) / (1+x) ) / 2. • Aceste relaţii fac parte din aritmetica în virgulă mobilă IEEE 754. • Rezultat - corect: arccos (-1) = .
Tipuri de valori în virgulă mobilă • În fiecare caz de mai jos, S este +1 sau -1 după cum bitul semn este 0 sau 1
Depăşiri • Depăşire inferioară: în forma normalizată a numărului, exponentul negativ nu poate fi reprezentat în câmpul caracteristicii • Depăşire superioară: în forma normalizată a numărului, exponentul pozitiv este prea mare pentru a putea fi reprezentat în câmpul caracteristicii