Presentation is loading. Please wait.

Presentation is loading. Please wait.

Arhitectura Sistemelor de Calcul - Bazele Aritmetice ale Sistemelor de Calcul. Grigore ALBEANU © galbeanu.

Similar presentations


Presentation on theme: "Arhitectura Sistemelor de Calcul - Bazele Aritmetice ale Sistemelor de Calcul. Grigore ALBEANU © galbeanu."— Presentation transcript:

1 ARHITECTURA SISTEMELOR DE CALCUL Grigore ALBEANU © galbeanu

2 Teme abordate BAZELE ARITMETICE ALE SISTEMELOR DE CALCUL BAZELE ARITMETICE ALE SISTEMELOR DE CALCUL BAZELE LOGICE ALE SISTEMELOR DE CALCUL BAZELE LOGICE ALE SISTEMELOR DE CALCUL STRUCTURA SISTEMELOR DE CALCUL STRUCTURA SISTEMELOR DE CALCUL Calculatorul MMIX Calculatorul MMIX © galbeanu

3 Bibliografie Grigore ALBEANU, Arhitectura sistemelor de calcul, Editura FRM, Bucuresti, 2007. Grigore ALBEANU, Arhitectura sistemelor de calcul, Editura FRM, Bucuresti, 2007. D. Knuth, Arta programarii calculatoarelor, MMIX – un calculator RISC pentru noul mileniu, Editura TEORA, 2005. D. Knuth, Arta programarii calculatoarelor, MMIX – un calculator RISC pentru noul mileniu, Editura TEORA, 2005. A.S. Tanenbaum, Organizarea structurala a calculatoarelor, Computer Press Agora, 1999. A.S. Tanenbaum, Organizarea structurala a calculatoarelor, Computer Press Agora, 1999. © galbeanu

4 1. BAZELE ARITMETICE ALE SISTEMELOR DE CALCUL 1.1. Sisteme de numeraţie 1.2. Coduri 1.3. Reprezentarea numerelor întregi 1.4. Reprezentarea IEEE 754 http://www.earth360.com/math_naturesnumbers_systems.jpg http://www.retrothing.com/2006/05/www.retrothing.com/2006/05/ publib.boulder.ibm.com © galbeanu

5 Sisteme de numeratie: zecimal, binar, octal, hexazecimal, etc. Pentru prelucrarea datelor, omul lucrează în sistemul de numeraţie zecimal, folosind cele 10 simboluri: 0, 1, 2,..., 9, numite cifre (eng. digits). Pentru domeniul sistemelor de calcul digitale[1], cele mai importante sisteme de numeraţie sunt: binar, octal şi hexazecimal.[1] Sistemul binar foloseşte baza de numeraţie 2: 0 + 1 = 1 + 0 = 1; 0 + 0 = 0; 1 + 1 = (10) 2 = 2 (în baza 10); 0 x 0 = 1 x 0 = 0 x 1 = 0, 1 x 1 = 1). Sistemul octal, cu baza opt, foloseşte simbolurile: 0, 1,..., 7. Baza de numeraţie a sistemului hexazecimal este 16, iar simbolurile folosite sunt: 0, 1,..., 9, a, b, c, d, e, f. Se pot utiliza – prin corespondenţă biunivocă - şi simbolurile A, B, C, D, E, F cu semnificaţia simbolurilor a, b, c, d, e, f. Datorită modului poziţional, de lucru, indiferent de sistemul de numeraţie utilizat, realizarea operaţiilor aritmetice urmează acelaşi algoritm. [1] Un sistem de calcul (calculator) este o structură destinată prelucrării datelor. El este alcătuit din resurse fizice (hardware), resurse logice (software) şi resurse informaţionale (fişiere de configurare, registre de profil etc.) care cooperează pentru satisfacerea cerinţelor utilizatorilor privind introducerea, memorarea (stocarea), prelucrarea, transmiterea (către un alt sistem de calcul), precum şi regăsirea (prin interogare) datelor. Se face distincţie între sistemele de calcul digitale (numerice) şi sistemele de calcul analogice.[1] © galbeanu Bazele de numeraţie îşi vor dovedi utilitatea atât în contextul programării calculatoarelor (limbaj de asamblare, limbajul C, limbajul C++ etc.), cât şi în contextul utilizării calculatoarelor (de exemplu, la specificarea culorii textului când se realizează pagini Web: pentru culoarea având structura 40% roşu, 20% verde şi 40% albastru, se obţine 40% din 255 = 102 = #66; 20% din 255 = 51 = #33, iar codul final al culorii se obţine prin concatenare: #663366). 1.1

6 Adunarea numerelor naturale cu n cifre: Fie X = (x n-1 x n-2 … x 1 x 0 ) b şi Y = (y n-1 y n-2 … y 1 y 0 ) b, operaţia Z = X + Y produce n simboluri în baza b, Z = (z n-1 z n-2 … z 1 z 0 ) b şi un simbol T pentru transport (transportul iniţial (carry-in) este 0). Algoritmul de calcul este: Algoritmul A1: T:= 0; Pentru k de la 0 la n-1 (crescător, cu pasul 1) se execută : S = x k +y k +T; Z k := S mod b (Restul împărţirii lui S la b); T := S / b (Câtul împărţirii lui S la b); http://cpuville.4t.com/adder.htm © galbeanu Procesul privind transformarea reprezentărilor exprimate în sisteme de numeraţie se numeşte conversie. 1.1

7 Conversia ZECIMAL –> Baza b – Etapa I Pentru a converti un număr real format din parte întreagă şi parte fracţionară (x = [x]+{x}), din scrierea zecimală, în baza b (b  2), se procedează astfel: Algoritmul A2. Fie y un număr natural căruia îi corespunde, în baza b, secvenţa (a n-1,a n, …,a 1,a 0 ) b, conform relaţiei y =, Algoritmul A2 descrie etapele prin care pornind cu y şi b se obţine lungimea n şi simbolurile codului. Date de intrare: y, b Paşii: k := 0; a k := y mod b; y := y / b; Cât timp y  0 se execută i)k := k + 1; ii)a k := y mod b; iii)y := y/b; n:=k+1; Ieşire: n, (a n-1,a n, …,a 1,a 0 ) b. © galbeanu Se împarte (conform teoremei împărţirii cu rest[2]) la b, partea întreagă şi câturile obţinute după fiecare împărţire, până se obţine câtul zero. Rezultatul conversiei este constituit din resturile obţinute, luate în ordine inversă apariţiei acestora. [2] Teorema împărţirii cu rest: Dacă a (deîmpărţit) şi b (împărţitor) sunt numere întregi (b nenul), atunci există şi sunt unice numerele întregi q (câtul) şi r (restul), astfel încât a = b x q + r, 0 ≤ r < |b|, unde |b| reprezintă modulul (valoarea absolută) a numărului b. 1.1

8 Conversia ZECIMAL –> Baza b – Etapa a II - a Algoritmul A3. Se porneşte de la numărul fracţionar y, baza b şi un număr m_MAX care indică numărul maxim de poziţii rezervate pentru partea fracţionară. Numerele y care necesită mai mult de m_MAX poziţii vor fi aproximate prin numărul rezultat din considerarea celor m_MAX poziţii (folosind algoritmul A5). Date de intrare: y, b, m_MAX Paşii: m = 1; a -m = [y*b]; y = y*b-a -m ; Cât timp (m < m_Max) şi (y  0) se execută: m := m+1; a -m := [y*b]; y = y*b - a -m ; Ieşire: m şi reprezentarea 0,(a -1,a -2, …,a -m ) b. Se înmulţeşte cu b, partea fracţionară[3] şi toate părţile fracţionare obţinute din produsul anterior, până când partea fracţionară este nulă sau a fost obţinut numărul de cifre dorit. Rezultatul conversiei părţii fracţionare este constituit din părţile întregi[4] ale produselor, luate în ordinea apariţiei.[3][4] [3] Partea fracţionară a unui număr real a, notată {a}, este diferenţă dintre numărul a şi partea sa întreagă, notată [a], adică {a} = a – [a]. [3] [4][4] Conform principiului lui Arhimede, pentru orice număr real pozitiv x şi pentru orice număr real a, există un număr întreg n, unic, astfel încât (n- 1)x  a < nx. Pentru x = 1, numărul întreg n se numeşte partea întreagă a numărului a şi se notează cu [a]. Deci, [a] este cel mai mic număr întreg mai mic sau egal cu a: [a]  a < [a]+1. © galbeanu 1.1

9 Exemple: Conversia binară a numărului zecimal 24,25 este 11000,01. Numărul zecimal 2002,2003 este reprezentat în sistem octal cu 10 poziţii în partea fracţionară (b = 8) prin şirul: 3722,1464333427. Numărul zecimal 1961,25 este reprezentat în format hexazecimal (b = 16) prin şirul: 7A9,4. © galbeanu 24 = 2 * 12 + 0 12 = 2 * 6 + 0 6 = 2 *3 + 0 3 = 2 * 1 + 1 1 = 2 *0 + 1 (11000,?) 0,25 * 2 = 0, 50 0,50 * 2 = 1, 00 (? = 01) 2002 = 8 * 250 + 2 250 = 8 * 31 + 2 31 = 8 * 3 + 7 3 = 8 * 0 + 3 (3722,?) 0,2003 * 8 = 1,6024 0,6024 * 8 = 4,8192 0,8192 * 8 = 6,5536 0,5536 * 8 = 4,4288 0,4288 * 8 = 3,4304 0,4304 * 8 = 3,4432 0.4432 * 8 = 3,5456 0,5456 * 8 = 4.3648 0,3648 * 8 = 2.9184 0,9184 * 8 = 7.3472 1961 = 16 * 122 + 9 122 = 16 * 7 + 10 (A) 7 = 16 * 0 + 7 (7A9,?) 0,25 * 16 = 4,0 (? = 0….) 1.1

10 Conversia Baza b –> ZECIMAL (preliminarii) Pentru a transforma un şir de simboluri ale sistemului de numeraţie în baza b (b  2), în zecimal, se va calcula suma produselor dintre cifra corespunzătoare (din şir) şi baza[5] ridicată la puterea specificată de poziţia acesteia (algoritmii A4 şi A5).[5] Trebuie observat că poziţiile sunt indicate: 1. pentru partea întreagă, de la dreapta la stânga, prin numerele 0, 1, … ş.a.m.d. 2. pentru partea fracţionară, de la stânga la dreapta, prin numerele: -1, -2, … ş.a.m.d. [5] Aici este vorba de numărul b (baza de numeraţie considerată; b  2)[5] © galbeanu …. 5 4 3 2 1 0, -1 -2 –3 -4 –5 ! 1.1

11 Conversia Baza b –> ZECIMAL – Algoritmul A4 Even though the algorithm is named after William George Horner, who described it in 1819, the method was already known to Isaac Newton in 1669, and even earlier to the Chinese mathematician Ch'in Chiu-Shao in the 13th century. ! © galbeanu 1.1

12 Conversia Baza b –> ZECIMAL – Algoritmul A5 © galbeanu 1.1

13 Exemple: Şirul binar 01100110101,10101 corespunde numărului zecimal: 821,65625 (= 1x2 9 + 1x2 8 + 0x2 7 + 0x2 6 + 1x2 5 + 1x2 4 + 0x2 3 + 1x2 2 +0x2 1 +1x2 0 +1x2 -1 +0x2 -2 +1x2 -3 +0x2 -4 +1x2 -5 ). Şirul octal 765,567 corespunde numărului zecimal: 501,732421875. Şirul hexazecimal 3A5,4 reprezintă numărul zecimal 933,25. © galbeanu 1.1

14 Conversii rapide Conversia din binar în octal, hexazecimal şi invers se bazează pe observaţia conform căreia 8 = 2 3 şi 16 = 2 4, Astfel, folosind proprietăţile de calcul, se obţine o strategie de conversie automată între aceste sisteme. Conversia binar  octal, respectiv octal  binar foloseşte corespondenţa: Octal:01234567 Binar:000001010011100101110111 Conversia binar  hexazecimal, respectiv hexazecimal  binar, foloseşte corespondenţa: Hexazecimal:01234567 Binar:00000001001000110100010101100111 Hexazecimal:89ABCDEF Binar:10001001101010111100110111101111 © galbeanu 1.1

15 Exemple: © galbeanu Şirul cu 64 poziţii binare: 0111.0110.1110.1101.1011.1011.1010.1010.1110.1011.0101. 0101.0101.0101.0101.0111 se va “traduce” în şirul octal: 0733555672535325252527, respectiv în şirul hexazecimal: 76EDBBAAEB555557. Se observă rolul sistemului binar ca sistem intermediar de conversie pentru sistemele de numeraţie în care baza este o putere a numărului doi. 10110011 + 111110 = 11110001 (baza 2); 34022,56-1234,11=32566,45 (baza 8); 5DA2 x B8 = 434C70 (baza 16). ? 1.1

16 Operatii aritmetice cu numere octale Tabla adunarii octale Tabla inmultirii octale © galbeanu 1.1

17 Operatii aritmetice cu numere HEXA © galbeanu Tabla adunarii HEXAzecimale Tabla inmultirii HEXAzecimale 1.1

18 Programul DEBUG (1) © galbeanu 1.1

19 Programul DEBUG (2) © galbeanu 1.1

20 Coduri - definire 1.2 Fie A şi B două mulţimi nevide şi B + mulţimea (infinită a) şirurilor (numite şi cuvinte nevide peste B) formate cu elemente din B (în calitate de alfabet). Practic, un cuvânt peste alfabetul B este o secvenţă finită de simboluri din B: w = a 1 a 2...a k, k  1, a i  B, 1  i  k. Numărul k reprezintă lungimea cuvântului w, notată şi prin |w|. Mulţimea tuturor cuvintelor peste B, la care se adaugă cuvântul de lungime zero (cuvântul vid), identificat prin, se notează cu B*, adică B* = B +  { }. Prin codificare a elementelor mulţimii A cu ajutorul elementelor mulţimii B înţelegem determinarea unei funcţii injective, , numită cod, definită pe mulţimea A cu valori în mulţimea B *. Uneori, se numeşte cod chiar imaginea mulţimii A, notată  (A), prin funcţia de codificare. © galbeanu

21 Coduri – tipuri, lungime © galbeanu 1.2 Codurile în care sunt reprezentate numai numere se numesc coduri numerice, iar cele care cuprind numere, literele şi celelalte semne se numesc coduri alfanumerice. Altfel spus, un cod este un set de simboluri elementare împreună cu o serie de reguli potrivit cărora se formează aceste simboluri. Codificarea reprezintă procesul de stabilire a unui cod. Dacă mulţimea A are n elemente, ne interesează determinarea lungimii codului, adică lungimea maximă a secvenţei din B * pentru a se putea codifica toate cele n obiecte. Dacă toate cuvintele din B * au aceeaşi lungime codul se numeşte uniform. O codificare  : A  B* în care toate cuvintele-cod  (x), x  A, au lungimea constantă k se numeşte codificare – bloc de lungime k, iar  (A) este un cod – bloc de lungime k.

22 Exemple: © galbeanu 1.2 Mulţimea codurilor – bloc conţine codul ASCII, codul Unicode, codul ISBN etc. ). Codul ASCII (eng. American Standard Code for Information Interchange) - în engleză pronunţat “as-key” - este cel mai popular cod utilizat în transmiterea datelor. Codul ISBN (eng. International Standard Book Number) este un cod folosit de toate editurile din lume, fiecare carte având codul său unic (compus dintr-un prefix, codul ţării, codul editurii, codul publicaţiei şi cifra de control[6]).[6] [6] Codul ISBN are lungimea 13: http://www.niso.org/standards/resources/ISBN.html Arhitectura Sistemelor de Calcul / Grigore Albeanu ISBN 978-973-725-756-7

23 Coduri de bare © galbeanu 1.2 Pentru cazul sistemelor de calcul, mulţimea B este formată din simbolurile unui sistem de numeraţie, iar lungimea codului depinde de natura obiectelor mulţimii A. Dacă B are numai două simboluri se obţine codificarea binară. Un mesaj m este un element (şir) din A*: m = m 1 m 2...m |m|. Codificarea mesajului m se obţine prin concatearea şirurilor  (m 1 ),  (m 2 ),...,  (m |m| ). Evident mesajul vid se codifică prin cuvântul vid. Codurile pot fi alfanumerice şi grafice (folosind imagini). Un exemplu de cod nenumeric, foarte popular, este codul de bare (eng. bar code). Codurile de bare pot fi liniare, dar şi 2D (PDF417, DataMatrix, MaxiCode etc.). Există coduri de bare cu lungime fixă, dar şi cu lungime variabilă[7].[7] [7] http://www.itsc.org.sg/synthesis/2001/itsc-synthesis2001-jinsoon-bar-coding.pdf

24 Atribute ale datelor În cazul transferului datelor între sisteme de calcul pot apărea erori. De aceea se utilizează coduri de control cu posibilitatea detectării şi corectării erorilor. Mai precis, se ataşează cifre binare (de control) la emisia mesajului, recepţia fiind responsabilă de controlul modului de respectare a corectitudinii mesajului. Cele mai utilizate procedee pentru detectarea erorilor sunt: codurile pentru controlul parităţii şi codurile polinomiale ciclice. Din cele de mai sus rezultă că datele sunt reprezentarea fizică (prin intermediul codului) a entităţilor din care este compusă informaţia (cifre, litere, semne speciale, imagini, sunete etc.) pentru ca aceasta să poată fi stocată, prelucrată sau transmisă. Din punct de vedere logic, unei date i se asociază un identificator (simbol sau nume pentru diferenţierea de alte date şi pentru referirea acesteia). În vederea prelucrării, datelor le sunt asociate atribute precum:  tipul datei (numeric: întreg sau real; logic; şir de caractere; enumerare, adresă etc.),  precizia reprezentării interne şi  modul de vizualizare (poziţie, aliniere, corpul simbolului, dimensiunea etc). În timpul prelucrării unele date îşi păstrează valoarea iniţială (se numesc constante), iar altele se modifică în timp (se numesc variabile). Constantele hexazecimale vor fi scrise cu ajutorul unuia dintre prefixele 0x, 0X, respectiv #, după care va urma secvenţa simbolurilor 0..9, a-f sau A-F. Constantele octale vor fi descrise prin utilizarea prefixului 0. În lipsa acestor prefixe, constantele numerice vor fi considerate ca fiind de tip zecimal (în baza 10). Prin caracter se înţelege un element al codului ASCII (sau Unicode), iar un şir de caractere, de obicei este încheiat cu un cod special. 1.2 © galbeanu

25 Reprezentarea numerelor întregi 1.3 © galbeanu Informaţia elementară este numită bit (eng. binary digit). Un bit este descris prin una din cifrele binare: 0, 1. Biţii se pot grupa formând un nyp (2 biţi; denumire[8] dată de Gregor N. Purdy, conform D. Knuth (2005) ), niblle (patru biţi), octet (opt biţi; eng. byte; denumire stabilită în 1956 de Dr. Werner Buchholz de la IBM) etc. Următoarele secvenţe de mai mulţi octeţi sunt foarte importante: wyde (doi octeţi), tetrabytes (patru octeţi), octabytes (opt octeţi). Intern, ceea ce prelucrează un calculator numeric este un şir de cifre binare. Aceste şiruri fără a avea vreo semnificaţie se numesc date. Într-un calculator, informaţia reprezentată codificat formează mulţimea datelor.[8] [8] Alte denumiri sunt: crumb, quad, quarter, tayste, tydbit, conform [8] http://www.fullbooks.com/The-New-Hacker-s-Dictionary-version-4- 2.htmlhttp://www.fullbooks.com/The-New-Hacker-s-Dictionary-version-4- 2.html, http://dictionary.reference.com/browse/crumb etc.http://dictionary.reference.com/browse/crumb

26 Hardware & Software Pentru a modela sistemul de numeraţie binar, trebuie utilizat un mecanism cu două stări (un comutator). Prin urmare, calculatorul poate fi privit ca un ansamblu de circuite electrice, electronice şi părţi mecanice, ansamblu numit hardware[9]. Prelucrarea datelor este realizată de programe, compuse din comenzi numite instrucţiuni. Totalitatea programelor poartă numele de software[10]. Se pot efectua operaţii de evaluare sau de transfer (cazul reţelelor de calculatoare).[9][10] [9][9] Cuvântul hardware descrie totalitatea resurselor fizice ale unui sistem de calcul. Conform dicţionarului de informatică [DINF1981], hardware (din limba engleză) reprezintă un "termen general desemnând circuitele, dispozitivele şi echipamentele componente ale unui sistem de calcul", adică "toate unităţile fizice existente, cu funcţii bine determinate, în cadrul unui sistem de calcul; funcţiile sale, specificate de către fabricant, sunt la dispoziţia utilizatorului care le poate exploata cum doreşte." [10][10] Cuvântul software descrie atât programele de bază cât şi pe cele aplicative. Conform [DINF1981], software (din limba engleză) reprezintă un "termen utilizat pentru a desemna: a) totalitatea programelor cu care este echipat un sistem de calcul; b) preocupările corespunzătoare realizării produselor program şi, în cel mai larg sens, analizei şi cercetărilor efectuate în raport cu activităţile conexe realizării programelor." 1.3 © galbeanu

27 Codul ASCII 1.3 © galbeanu Sistemele de calcul utilizează cel mai frecvent coduri alfanumerice cu 7, 8 şi 16 cifre binare care permit reprezentarea a 128 (ASCII), 256 (Latin-1 sau ISO 8859-1), respectiv 65536 (Unicode sau ISO/IEC 10646 UCS-2) obiecte (cifre, litere, caractere speciale. Valorile din domeniul 0..31 ale codului ASCII descriu elemente de control, valorile din domeniul 32..126 descriu simboluri imprimabile (semne speciale, litere, cifre), iar valoarea 127 reprezintă codul elementului de control DEL. În tabelul de mai jos este prezentat codul ASCII în exprimarea hexazecimală (de exemplu, #41 = 65, reprezintă caracterul 'A', iar #20 = 32 = SP este caracterul 'spaţiu'.)

28 Reprezentarea aritmetica 1.3 © galbeanu Reprezentarea numerelor în acest sistem se face în mai multe forme, în funcţie de mulţimea căreia îi aparţin numerele, operaţiile aritmetice fiind efectuate de către dispozitive aritmetice specializate (sumatoare, multiplicatoare etc.). Reprezentarea numerelor naturale se realizează pe un număr fix de poziţii binare (de regulă 8, 16, 32, sau 64) prin conversia numărului zecimal în baza 2. Pentru numărul natural x, această reprezentare este numită reprezentare aritmetică şi furnizează aşa numitul cod direct c d (x). Prin utilizarea a n poziţii binare (n  1) se pot reprezenta aritmetic toate numerele naturale din plaja: 0.. 2 n -1. Se spune că aceste date sunt fără semn (eng. unsigned).

29 Domenii de valori (unsigned) Domeniile de valori acoperite de reprezentarea aritmetică sunt: unsigned byte0.. 255 unsigned wyde 0.. 65.535 unsigned tetra0.. 4.294.967.295 unsigned octa0.. 18.446.744.073.709.551.615 Operatii circulare: 255 + 1 = 0; 255 + 2 = 1; (u_byte) 65535 + 1 = 0; 65535+3 = 2; (u_wyde) 4294967295 + 1 = 0 (u_tetra) Max(u_octa) + 1 = 0 ! 1.3 © galbeanu

30 Codul complementar faţă de doi Reprezentarea numerelor întregi (eng. signed)- numită şi reprezentare algebrică - este asemănătoare reprezentării numerelor naturale, cu deosebirea că prima poziţie este ocupată de semnul numărului întreg, iar celelalte simboluri se obţin în urma unei transformări bit cu bit. De obicei, reprezentarea unui număr întreg negativ x utilizează codul complementar faţă de doi c 2 (x) = c 1 (c d (|x|))+1, unde c 1 asociază oricărei secvenţe binare, şirul obţinut prin schimbarea lui 0 în 1 şi a lui 1 în 0 (aşa numitul cod invers sau complement faţă de unu). În plus[11], c 2 (x) = 2 n +x, dacă primul bit din c 2 (x) este 1 (x < 0).[11] [11] De asemenea, dacă b>1 este baza unui sistem de numeraţie, iar x<0 este un număr a cărui reprezentare în baza b are n simboluri pentru partea întregă a valorii absolute, atunci complementul faţă de b al numărului x, notat c b (x) este definit astfel încât c b (x) = b n + x. [11] 1.3 © galbeanu

31 Reprezentarea algebrica Cunoscând numărul n (n  1) de poziţii binare pe care se reprezintă un număr întreg în forma algebrică, plaja numerelor care admit o reprezentare în cod complementar este -2 n-1.. 2 n-1 -1. Codul complementar este potrivit pentru aplicaţii deoarece operaţia de scădere este transformată în operaţie de adunare conform formulei: a - b = a + (-b), iar scăzătorul este reprezentat în cod complementar. Dacă rezultatul scăderii este un număr negativ, acesta este reprezentat tot în cod complementar. Dacă apare transport de la poziţia alocată semnului, acesta se ignoră. 1.3 © galbeanu

32 Domenii de valori (signed) Domeniile de valori[12] acoperite de reprezentarea algebrică sunt:[12] signed byte-128.. 127 signed wyde -32.768.. 32.767 signed tetra-2.147.483.648.. 2.147.483.647 signed octa -9.223.372.036.854.775.808.. 9.223.372.036.854.775.807 [12][12] Trebuie subliniat că aceste domenii împreună cu operaţiile de adunare şi înmulţire nu formează structurile algebrice cunoscute. De exemplu nu orice întreg cu semn reprezentabil pe 64 de biţi are un opus. 1.3 © galbeanu

33 Reprezentarea IEEE 754 1.4 © galbeanu Numerele reale (mai precis numerele raţionale) se reprezintă sub formă fracţionară prin intermediul codificării în virgulă mobilă. Operaţiile aritmetice cu numere în virgulă mobilă sunt, fie realizate software (biblioteca metodelor de calcul numită şi API (eng. Application Programmer Interface)), fie prin intermediul unor dispozitive electronice specializate (procesoare de calcul în virgulă mobilă; FPU – Floating Point Unit). Fie q şi b numere naturale nenule, iar x  R dat. Numim reprezentare cu virgulă mobilă a numărului x, cu excesul q, în baza b, perechea (e, f) cu semnificaţia: x = f  b e-q şi  f  <1. Componenta e se numeşte parte exponenţială, iar componenta f, parte fracţionară. Dacă reprezentarea impune utilizarea a p  1(p  N * ) cifre în baza b atunci -b p  b p f < b p.

34 Multimea numerelor reprezentabile Notăm cu e(x) (respectiv f(x)) cantitatea e (respectiv f) pentru a specifica numărul x luat în considerare. Fie x, y numere reale, q şi b ca mai sus, dar fixate. Relaţia de ordine ">" este definită astfel: x > y  e(x) > e(y) sau ( e(x) = e(y) şi f(x) > f(y) ). Despre un număr cu virgulă mobilă (e, f) se spune că este reprezentat normalizat dacă cifra cea mai semnificativă a reprezentării componentei f este nenulă, adică 1/b   f  <1 pentru f  0 sau componenta e are cea mai mică valoare posibilă pentru f = 0. Fie e min, e max numere întregi fixate. Mulţimea numerelor reale cu virgulă mobilă reprezentabile exact, în baza b, cu excesul q, folosind exact p poziţii pentru partea fracţionară este F p,q =  x  Q  x = f  b e-q, e min  e-q  e max, f =  (c 1 b -1 + c 2 b -2 +... + c p b -p ), c i  0, 1,..., b-1 , i =1, 2,...,p . Fie x un număr real. Spunem că x este situat în domeniul de valori numai dacă x  F p,q. 1.4 © galbeanu

35 Valori speciale Exponentul minim e min este un număr întreg negativ, iar exponentul maxim e max este un număr întreg pozitiv. De obicei se memorează b t f folosind una dintre reprezentările cu semn pentru numere întregi (cod invers sau cod complementar). Observaţii: 1. Numerele şi sunt: cel mai mic număr pozitiv reprezentabil, respectiv cel mai mare număr reprezentabil. -K este cel mai mic număr reprezentabil. Dacă în timpul operaţiilor aritmetice rezultă numere în valoare absolută mai mici decât k (resp. mai mari decât K) se spune că s-au produs depăşiri aritmetice inferioare (respectiv, superioare). 2. Nu orice număr raţional x (x  Q) poate fi reprezentat, chiar dacă k   x  K. De exemplu, x = 0,1 număr reprezentabil exact în baza 10, nu se poate reprezenta exact în baza 2. Acesta face ca expresia: 3/5*5-3 să fie evaluată de către mediul de programare Turbo Pascal, la valoarea 2.1684043450E-19, adică 0,00000000000000000021684043450, un număr foarte mic, dar nenul. 3. Dacă x  F p,q atunci –x  F p,q. Totuşi, pentru x  F p,q se poate întâmpla ca 1/x să nu fie reprezentabil sau să nu fie în domeniul de valori. 4. Sistemele de calcul actuale utilizează reprezentarea normalizată. În acest caz pentru f  0 avem c 1  0. Numărul 0 are o reprezentare specială care depinde de tipul sistemului de calcul. 1.4 © galbeanu

36 Eroarea relativa a reprezentarii Fie x  R, valoarea reprezentării lui x aparţinând mulţimii F p,q, se notează prin fl(x) şi se defineşte astfel: numărul reprezentabil exact, cel mai apropiat de x (metoda rotunjirii) sau cel mai apropiat număr reprezentabil, cu modul mai mic decât  x  (metoda trunchierii). Rezultă: Oricare x  R, x  0,, unde c = 0.5 în cazul metodei rotunjirii şi c =1 în cazul metodei trunchierii. Membrul stâng al inegalităţii de mai sus se numeşte eroarea relativă a reprezentării numărului x. Acest rezultat este foarte important pentru interpretarea rezultatelor obţinute prin prelucrarea numerică a datelor. Observaţii: 1. Sistemele de calcul bazate pe reprezentarea cu rotunjire sunt de preferat celor bazate pe trunchiere, deoarece în cazul trunchierii, eroarea relativă poate fi de până la o cifră a bazei în ultima poziţie. 2. Cu cât lungimea reprezentării părţii fracţionare (p) este mai mare, cu atât eroarea relativă a reprezentării este mai mică, adică precizia reprezentării este mai mare. De aceea, de multe ori, numărul p se mai numeşte (prin abuz de limbaj) şi precizia reprezentării. 1.4 © galbeanu

37 IEEE 754 Fie p, b, e şi q fixate. Distanţa absolută dintre două numere consecutive din F p,q este constantă şi egală cu b e-q-p. Această distanţă creşte însă cu e-q şi b pentru p fixat. Distanţa relativă definită ca b -p /|f| scade o dată cu creşterea părţii fracţionare. Astfel se poate afirma, din nou, că sistemele de calcul preferate sunt cele care utilizează baza 2. Dacă f = 1/b atunci se obţine distanţa relativă maximă,  M = b 1-p. În cazul multor sisteme de calcul  M = 2  u unde  u este cel mai mic număr pozitiv reprezentabil pentru care fl(1+  u )>1. Pentru sistemele de calcul pentru care b = 2, în anul 1985, a fost elaborat standardul IEEE 754. Un număr în virgulă mobilă este reprezentat cu ajutorul a c+m+1 biţi (un bit pentru semn, m biţi pentru partea fracţionară şi c biţi pentru reprezentarea lui e-q (numit şi caracteristică)) astfel încât numărul c+m+1 să fie un multiplu al lungimii cuvântului sistemului de calcul. 1.4 © galbeanu

38 Implementare double (C, Java, …) Implementarea reprezentărilor în virgulă mobilă IEEE 754 pe 64 de biţi (tipul de date double al limbajului Java). NaN, respectiv Inf sunt coduri care descriu nedeterminarea, respectiv  (infinit). Cei 64 de biţi sunt repartizaţi astfel: b 63 - bit de semn, biţii b 52 -b 62 - caracteristica, iar biţii b 0 -b 51 pentru reprezentarea părţii fracţionare. Valoarea numărului reprezentat astfel, se obţine după cum urmează: D1: Dacă 0 < c < 2047 atunci fl(x) = (-1) s.2 (c-1023).(1.f). D2: Dacă c = 0 şi f  0 atunci fl(x) = (-1) s.2 (c-1022). (0.f). D3: Dacă c = 0 şi f = 0 atunci fl(x) = (-1) s.0. D4: Dacă c = 2047 şi f = 0 atunci fl(x) = (-1) s Inf. D5: Dacă c = 2047 şi f  0 atunci fl(x) =(-1) s NaN. 1.4 © galbeanu

39 Exemplu: Ilustrăm aplicarea regulilor de mai sus pentru numărul 3.14. Folosind schema din §1.1.1 obţinem: 3 = (11) 2 ; 0.14 = 0.0(01000111101011100001) adică un număr binar periodic mixt. Astfel şirul 11,0010001111010111000010100011110101110000101000111101011100001... este transformat în 2 1 x 1,10010001111010111000010100011110101110000101000111101011100001... ceea ce duce la - bitul de semn: 0 - caracteristica: x-1023=1  x = 1024 = (1000000000) 2 - mantisa este: 10010001111010111000010100011110101110000101000111101011100001... cu păstrarea a exact 52 de poziţii în reprezentarea cu trunchiere, respectiv 1001000111101011100001010001111010111000010100011111, în reprezentarea cu rotunjire. Prin asamblarea celor 64 de biţi, pentru modelul cu rotunjire, se obţine reprezentarea IEEE 754 a numărului 3.14, pe 64 de biţi, cu afişare în sistemul de numeraţie hexazecimal: 40091EB851EB851F. Totuşi, transformarea inversă a şirului 11,00100011110101110000101000111101011100001010001111 din baza 2 în baza 10 nu va duce la obţinerea cu exactitate a numărului 3.14, în nici una din variantele posibile (cu rotunjire sau cu trunchiere), deoarece reprezentarea în baza doi a numărului 3.14 este infinită, iar şirul de mai sus este unul finit. 1.4 © galbeanu

40 Alte exemple: Alte exemple de aproximări IEEE 754 sunt date în tabelul următor: Numărul zecimalReprezentare hexazecimală (cu rotunjire) -3.14C0091EB851EB851F 0.63FE3333333333333 0.13FB999999999999A -0.1BFB999999999999A De reţinut că deşi adunarea/înmulţirea sunt operaţii interne şi este satisfăcută proprietatea de comutativitate, acestea nu sunt asociative. Înmulţirea nu este distributivă faţă de adunare, sunt probleme cu existenţa opusului (pentru NaN) şi cu relaţia de monotonie. ? Cum se calculează 1.4 © galbeanu

41 Complemente si Exercitii (1) Reprezentarea IEEE 754 pentru single, respectiv float, utilizează 32 de biţi repartizaţi astfel: b[31] - bit de semn (notat în continuare cu s), biţii b[23]-b[30] pentru memorarea caracteristicii (c), iar biţii b[0]-b[22] pentru reprezentarea părţii fracţionare (f). Valoarea fl(x), se obţine conform regulilor (prin * este redată operaţia de înmulţire): Reprezentarea IEEE 754 pentru single, respectiv float, utilizează 32 de biţi repartizaţi astfel: b[31] - bit de semn (notat în continuare cu s), biţii b[23]-b[30] pentru memorarea caracteristicii (c), iar biţii b[0]-b[22] pentru reprezentarea părţii fracţionare (f). Valoarea fl(x), se obţine conform regulilor (prin * este redată operaţia de înmulţire): S1: Dacă 0 < c < 255 atunci fl(x) = (-1) s *2 (c-127) *(1,f). S1: Dacă 0 < c < 255 atunci fl(x) = (-1) s *2 (c-127) *(1,f). S2: Dacã c = 0 şi f  0 atunci fl(x) = (-1) s *2 (c-126) *(0,f). S2: Dacã c = 0 şi f  0 atunci fl(x) = (-1) s *2 (c-126) *(0,f). S3: Dacã c = 0 şi f = 0 atunci fl(x) = (-1) s *0. S3: Dacã c = 0 şi f = 0 atunci fl(x) = (-1) s *0. S4: Dacã c = 255 şi f = 0 atunci fl(x) = (-1) s Inf (  ). S4: Dacã c = 255 şi f = 0 atunci fl(x) = (-1) s Inf (  ). S5: Dacă c = 255 şi f  0 atunci fl(x) = NaN. (Not a Number - nedeterminare) S5: Dacă c = 255 şi f  0 atunci fl(x) = NaN. (Not a Number - nedeterminare) 1.4 © galbeanu

42 Complemente si Exercitii (2) [Codul Gray] Se consideră cifrele zecimale de la 0 la 9 şi secvenţele de patru cifre binare pornind de la 0000 care se obţin prin modificarea unei singure cifre binare din secvenţa anterioară. Se obţine, astfel, codul Gray: (0, 0000), (1, 0001), (2, 0011), (3, 0010), (4, 0110), (5, 0111), (6, 0101), (7, 0100), (8, 1100), (9, 1101). Trebuie observat că acest cod nu se obţine prin algoritmi de conversie a bazelor de numeraţie. [Codul Gray] Se consideră cifrele zecimale de la 0 la 9 şi secvenţele de patru cifre binare pornind de la 0000 care se obţin prin modificarea unei singure cifre binare din secvenţa anterioară. Se obţine, astfel, codul Gray: (0, 0000), (1, 0001), (2, 0011), (3, 0010), (4, 0110), (5, 0111), (6, 0101), (7, 0100), (8, 1100), (9, 1101). Trebuie observat că acest cod nu se obţine prin algoritmi de conversie a bazelor de numeraţie. Numărul zecimal 0,6 se reprezintă cu exactitate în memoria sistemelor de calcul binare. Această afirmaţie este: Numărul zecimal 0,6 se reprezintă cu exactitate în memoria sistemelor de calcul binare. Această afirmaţie este: a.adevărată întotdeaunac.adevărată pentru microprocesoare INTEL a.adevărată întotdeaunac.adevărată pentru microprocesoare INTEL b.falsă întotdeaunad.adevărată pentru procesoarele supercalculatoarelor b.falsă întotdeaunad.adevărată pentru procesoarele supercalculatoarelor Numărul zecimal reprezentat binar prin 101011,101 este: Numărul zecimal reprezentat binar prin 101011,101 este: a.12,345c.43,625 a.12,345c.43,625 b.34,125d.nici una dintre variantele anterioare b.34,125d.nici una dintre variantele anterioare 1.4 © galbeanu


Download ppt "Arhitectura Sistemelor de Calcul - Bazele Aritmetice ale Sistemelor de Calcul. Grigore ALBEANU © galbeanu."

Similar presentations


Ads by Google