Sunteți pe pagina 1din 14

Curs 2

Baze de numeraie, reprezentarea numerelor

Sisteme de numeraie
F.Boian, Bazele matematice ale calculatoarelor, UBB Cluj-Napoca, 2002 Sistem de numeraie - totalitatea regulilor folosite pentru scrierea numerelor cu ajutorul unor simboluri (cifre).

1. Sistemul de numeraie roman

sistem aditiv

Cifre: I V X L C D M 1 5 10 50 100 500 1000 Reguli: a) mai multe cifre de aceeai valoare, scrise consecutiv, reprezint suma acestor cifre: XX=20 MMM=3000 b) o pereche de cifre diferite, cu cifra mai mare aflat n faa cifrei mai mici, reprezint suma acestor cifre: XIII=10+3=13 VII=5+2=7 DX=500+10=510 c) o pereche de cifre diferite, cu cifra mai mic n faa cifrei mai mari, reprezint diferena acestor cifre: IV=5-1=4 IX=10-1=9 IL=50-1=49 d) pentru scrierea unor numere mai mari se folosete o bar orizontal deasupra simbolurilor, bar care indic nmulirea valorii corespunztoare simbolului cu 1000 V =5000 Dezavantaje: scriere greoaie reprezentri multiple ale numerelor (ex: 490=CDXC=XD) numere lungi operaii lente nu exist simbol pentru valoarea zero

Exemple

1989=MCMLXXXIX

2010=M M X

Palatul Josika (Casa cu picioare) este nlat pe locul fostei reedine clujene a principilor Transilvaniei. Cldirea a devenit reedina lui Anton Josika, comite al Clujului, la mijlocul secolului al XVIII-lea. Cldirea n stil neoclasicist a cptat nfiarea de astzi n anul 1828, cnd a fost refcut de Josika Janos, guvernator al Transilvaniei. Elementul caracteristic n faad este porticul sobru cu coloanele dorice. Atica poart inscripia MDCCCXXVIII (1828), anul renovrii cldirii. 1

Curs 2

Baze de numeraie, reprezentarea numerelor

2. Sistemul de numeraie arab

- sistem poziional Aportul unei cifre n stabilirea valorii unui numr depinde de valoarea cifrei i de poziia ocupat n irul de cifre folosit. Regul: a) Fiecare grup de 10 elemente (uniti, zeci, sute, etc.) formeaz o grup de rang superior (zece, sut, mie, etc.) Sistemul de numeraie cu baza 10 (zecimal) Cifre: 0 1 2 3 4 5 Sistemul de numeraie octal - baza 8 cifre: 0 1 2 3 4 5 Sistemul de numeraie binar - baza 2 cifre: 0 1 Sistemul de numeraie hexazecimal - baza 16 cifre: 0 1 2 3 4 5 B(=11) C(=12) D(=13) 6 6 7 7 8 9

6 7 E(=14)

8 9 F(=15)

(=10)

Reprezentarea numerelor naturale ntr-o baz oarecare b Orice numr natural x poate fi scris sub forma: x=c0+c1b+c2b2+...+cn-1bn-1+cnbn unde ci<b, i=0,1...,n se numesc cifrele numrului n baza b.

Exemple:
Numrul ( xyz )b = zb0 + yb1 + xb2 (271)10 = 1+710+2100

(1101)2=120+02+122+123=13 (A3C)16=12160+316+10162=2620

Conversia dintr-o baz oarecare b n baza 10

Pentru transformarea unui numr dintr-o baz oarecare b n baza 10 se nmulete ultima cifr a numrului cu baza la puterea 0, penultima cifr se nmulete cu baza la puterea a 1-a, antepenultima cu baza la puterea a 2-a, etc. i se adun rezultatele acestor nmuliri. Pentru a face astfel de transformri trebuie cunoscute cifrele numrului care se transform. Mai jos este dat ca exemplu un program care determin numrul de cifre ale unui numr natural n baza 10 i valorile cifrelor acestui numr. Cifrele numrului sunt resturile mpririi ntregi a numrului la baza sistemului de numeraie n care este scris. Dup fiecare mprire, noul numr care se mparte este ctul mpririi precedente. Impririle continu pn cnd ctul devine 0.

Program exemplu: determinarea numrului de cifre ale unui numr natural


//Determina numarul de cifre ale unui numar natural //Numarul trebuie sa fie <=32767 (de tip int) //Cifrele numarului sunt stocate ca elemente ale sirului sirc #include <stdio.h> #include <conio.h> void main() { int c,r,nr,N,j,sirc[100];
2

Curs 2

Baze de numeraie, reprezentarea numerelor

printf("\nProgramul determina numarul de cifre ale unui numar natural\n"); printf("\nNumarul trebuie sa fie <=32767 (de tip int)\n\n\a"); do { printf("\nIntroduceti un nr pozitiv: "); scanf("%d",&nr); } while(nr<0); j=0; do { c=nr/10; r=nr-c*10; sirc[j]=r; nr=c; j++; } while(nr>0); N=j-1; printf("\nNumarul are %d cifre. Sirul format din cifrele sale este\n\t",j); for(j=N;j>=0;j--) printf("\n%d",sirc[j]); }

Pentru determinarea cifrelor zecimale unui numr real se procedeaz n felul urmtor: Fie nr numrul real dat. 1. se determin prima cifr zecimal a numrului ca i cif=[10*(nr-floor(nr))] //floor returneaza cel mai mare ntreg <= nr 2. nr=nr*10 3. dac nrfloor(nr) continu la 1 4. stop

//[] semnifica partea ntreaga a numrului

Program exemplu: determinarea numrului de cifre zecimale ale unui numr real
//Determina numarul de cifre zecimale ale unui numar real //si construieste un sir cu aceste cifre #include #include #include #include <iostream.h> <stdio.h> <math.h> <conio.h>

void main() { double nr; long int j,N,sir[100],cif; printf("\nProgramul determina numarul de cifre zecimale ale unui numar real\n"); printf("si construieste un sir avand ca elemente cifrele zecimale ale numarului dat\n"); do { printf("\nIntroduceti un numar real:\t"); // fflush(stdin); } while(scanf("%lf",&nr)!=1); j=0; // contor pentru sirul care va contine cifrele zecimale ale numarului real
3

Curs 2

Baze de numeraie, reprezentarea numerelor

while(nr!=floorl(nr)) //sau while((nr-floorl(nr))>1e-6) { //determina cifra actuala cif=(long int) (10*(nr-floorl(nr))); sir[j]=cif; nr=nr*10.0; j++; } N=j; printf("\nNumarul are %d cifre zecimale, iar sirul format din cifrele sale este:\n",N); for(j=0;j<N;j++) cout<< sir[j]; getch(); }

Conversia din baza 10 n alte baze

(24)10 = (11000)2

(256)10 = (400)8

(2653)10 = (A5D)16

Pentru transformarea unui numr natural din baza 10 ntr-o baz oarecare b se mparte numrul respectiv la baz, obinndu-se un ct i un rest mai mic dect b. Apoi se mparte ctul obinut la b obinndu-se un nou ct i un nou rest mai mic dect b. mprirea continu pn cnd se obine ctul 0. Cifrele numrului n baza b sunt resturile mpririlor, citite de la ultimul rest ctre primul.

Program exemplu: tiprirea unui numr natural n baza 10 introdus de la tastatur, n bazele 10, 8 i 16, folosind specificatorii de tip %d, %o i %x
//Tipareste un numar natural introdus de la tastatura //in bazele 10, 8 si 16 #include <iostream.h> #include <stdio.h> void main() { int n; cout << "Introduceti un nr. natural n (in baza 10) : cin >> n; cout << "Baza 10: " << n; printf("\nBaza 8: %o", n); printf("\nBaza 16: %X", n); } ";

Program exemplu: transformarea unui numr din zecimal n binar


//Transforma un numar natural din zecimal in binar #include <stdio.h> #include <conio.h>

Curs 2

Baze de numeraie, reprezentarea numerelor

void main() { int c,r,nr,i,j,bin[100]; printf("\nProgramul face transformarea in binar a unui numar natural\n"); printf("\nNumarul trebuie sa fie <=32767 (de tip int)\n\n\a"); do { printf("\nIntroduceti un nr pozitiv: "); scanf("%d",&nr); } while(nr<0); j=0; do { c=nr/2; r=nr-c*2; bin[j]=r; j++; nr=c; } while(nr>0); printf("\nNumarul transformat in binar este:\t"); for(i=j-1;i>=0;i--) printf("%d",bin[i]); }

Conversia unui numr real ntre dou baze de numeraie 2 pai 1. conversia prii ntregi prin metoda mpririlor succesive - se fac mpriri pn cnd ctul devine zero, iar numrul se obine din irul resturilor scris n ordine invers 2. conversia prii fracionare prin metoda nmulirilor succesive - se fac nmuliri pn cnd: a) - partea de dup virgul devine zero b) - se ajunge la un numr prestabilit de cifre c) - se ajunge la o periodicitate - cifrele prii fracionare sunt cifrele care, n urma nmulirilor succesive, ajung n faa punctului zecimal Partea fracionar a unui numr scris ntr-o baz b se poate scrie sub forma: c-1/b + c-2/b2 + c-3/b3 + ... unde c-1 este cifra aflat imediat dup virgul, c-2 este a doua cifr a prii zecimale, etc. Fie numrul 0.369140625 n baza 10 care va fi convertit n baza 8. Vom nmuli mereu prile fracionare cu 8

Exemplu:

S-a ndeplinit criteriul a), obinndu-se zero dup virgul Aadar: (0.369140625)10 = (0.275)8

Curs 2

Baze de numeraie, reprezentarea numerelor

Verificare:

2 7 5 128+56+5 189 (0.275)8 = + 2 + 3 = = = 0.369140625 8 8 8 512 512

Tem: Transformai numrul 0.369140625 n baza 2. Fie numrul 0.416382 pe care l vom converti tot n baza 8, reinnd numai primele 3 cifre: 0 4 1 6 3 8 2 x 8 3 3 3 1 0 5 6 2 6 4 8 4 4 8 5 1 8 7 5 8 4 . . . . . . . Aadar: (0.416382)10 = (0.325...)8 Convertind acum numrul (0.325)8 n baza 10 obinem:

3 2 5 192+16+5 213 (0.325)8 = + 2 + 3 = = = 0.416015625 0.416382 8 8 8 512 512

adic am obinut o eroare de trunchiere. Astfel de erori apar frecvent n cazul conversiilor duble, atunci cnd se reine un numr prestabilit de cifre semnificative. Tem: Transformai numrul 0.3741 n baza 2, reinnd primele 6 cifre binare apoi facei transformarea invers. Care este diferena dintre numrul iniial i cel obinut prin transformarea invers? Algoritm pentru conversia prii fracionare dintr-o baz p n alt baz q, prin metoda nmulirilor succesive: Fie f partea fracionar. Dup obinerea cifrei de rang -1 cu relaia c-1=[qf] ( [ ] semnific partea ntreag) n baza b se efectueaz din nou nmulirea nlocuind pe f cu qf, etc. 1. citete f n baza p 2. i=0; 3. dac f=0 sau s-au obinut suficiente cifre continu la pasul 8 4. ci=int(fq) // partea ntreag a lui fq 5. f=partea fractionar a lui fq adic f = fq-[fq] 6. i++ 7. continu la pasul 3 8. n=i 9. scrie ci, i=0, 1, ..., n-1 10. stop

Program exemplu: Conversia prii fracionare a unui numr scris n baza 10 ntr-o baz oarecare q
//Programul converteste partea fractionara a unui numar scris in baza 10 //intr-o alta baza q. Numarul se va introduce sub forma 0.xxxxxxx... #include <iostream.h> #include <stdio.h> #include <math.h> void main() { double f; int i,n, c[20],q,nmax=15,cond; cout << "Introduceti partea fractionara a numarului, sub forma: 0.xxxxxxx...: "; cin >> f;
6

Curs 2

Baze de numeraie, reprezentarea numerelor

cout << "Noua baza: "; cin>> q; i=0; do { c[i]=floor(f*q); f=f*q-floor(f*q); i++; //Stabilirea conditiei de incheiere: fie f=0, fie s-a // ajuns la numarul de cifre impus if(f==0.0) cond=1; else if(i==nmax) cond=1; else cond=0; } while(!cond); n=i; cout<<"Cifrele partii fractionare in baza " << q << " sunt: "; for(i=0;i<n;i++) cout << c[i]; }

Reprezentarea numerelor Reprezentarea numerelor ntregi cu semn n complement fa de 2

Definiii

1. Bit - unitatea de informaie 2. Byte (octet) - unitatea de adresare (8 bii) 3. Locaie de memorie - unitatea de reprezentare a unei date, format din unul sau mai muli octei 4. Word numr de octei prelucrai simultan de ctre procesor (numerele reale se reprezint de obicei pe un cuvnt) = limea de band

n memoria computerelor, numerele sunt reprezentate ca i numere binare, pe un anumit numr (finit) de bii. Valorile care pot fi reprezentate depind de numrul de bii folosii pentru respectiva reprezentare. Spre exemplu, pe 2 bii poate fi reprezentat valoarea maxim 3 = (11)2, iar pe 8 bii poate fi reprezentat valoarea maxim 255=(11111111)2. Dac trebuie reprezentate numere ntregi cu semn, atunci un bit din numrul total de bii ai reprezentrii va fi folosit pentru semnul numrului. Bitul de semn va fi bitul de rang maxim (cel mai din stnga):

In reprezentarea n complement fa de 2, un numr pozitiv se reprezint pe cei n bii, cu bitul de semn 0. Valoarea maxim reprezentabil pe n bii va fi: pe patru bii: pe opt bii: 0 0 1 1 1 1 1 1 1 1 1 1 (111)2 = 7=23-1 (1111111)2 = 127=27-1

Aadar, pe n bii, valoarea maxim reprezentabil este: 2n-1-1 In reprezentarea n complement fa de 2, numerele negative se obin scznd n binar, numrul pozitiv din 2n. Bitul de semn pentru numerele negative va fi 1.
7

Curs 2

Baze de numeraie, reprezentarea numerelor

Aadar, n acest cod, dac X este pozitiv se reprezint ca atare pe n-1 bii, iar dac este negativ, se reprezint valoarea 2n-|X|.

Exemplu:

Numrul +18, reprezentat pe 8 bii este: 0 0 0 1 0 0 1 0 Numrul -18 se obine scznd din 2n n binar valoarea +18 n binar (vezi figura de mai jos):

Reprezentarea numerelor ntregi n complement fa de 2

sau acelai lucru, se scade n zecimal +18 din 2n (din 28) i se reprezint rezultatul scderii n binar: 28-18=256-18=238 (238)10=(11101110)2 O metod mai rapid de deducere a reprezentrii numerelor ntregi negative n complement fa de 2 pe n bii rezult din discuia precedent i este dat de urmtoarea regul:

Acest lucru este echivalent cu faptul c valoarea oricrui numr negativ, cu Exemple de reprezentare a numerelor ntregi pe 8 bii 0 1 1 1 1 1 1 1 127 excepia celui mai mic se obine pornind 0 1 1 1 1 1 1 0 126 de la numrul pozitiv reprezentat n binar dup care se rstoarn toi biii (1->0 i 0->1), adugndu-se apoi valoarea 1. 0 0 0 0 0 0 1 1 3 Analog se procedeaz pentru a trece de 0 0 0 0 0 0 1 0 2 la numrul negativ reprezentat n binar la 0 0 0 0 0 0 0 1 1 numrul pozitiv corespunztor (vezi ca 0 0 0 0 0 0 0 0 0 exemplu tabelul alturat). 1 1 1 1 1 1 1 1 -1 Valoarea -1 (cel mai mare numr negativ) reprezentat pe n bii se obine 1 1 1 1 1 1 1 0 -2 setnd toi cei n bii pe valoarea 1. 1 1 1 1 1 1 0 1 -3 Valoarea celui mai negativ numr pe n bii se obine setnd toi biii, cu excepia 1 0 0 0 0 0 1 0 -126 celui de semn (cel mai reprezentativ bit) 1 0 0 0 0 0 0 1 -127 pe valoarea 1 i apoi rsturnarea tuturor 1 0 0 0 0 0 0 0 -128 biilor. Astfel se obine numrul negativ al crui modul este dat de biii astfel obinui, fr a se ine cont de semn. Implicit rezult c n cod complementar fa de 2, valoarea minim reprezentabil pe n bii este -2n-1.

Pentru a reprezenta n complement fa de 2 un numr ntreg negativ se reprezint modulul su dup care, ncepnd de la bitul de ordin zero spre stnga toi biii 0 i primul bit 1 se pstreaz i toi ceilali i inverseaz valoarea (0->1 i 1->0).

Curs 2

Baze de numeraie, reprezentarea numerelor

Fie n = 4 bii Pentru X=6 reprezentarea n binar pe 4 bii va fi: 0110 Pentru X=-6, reprezentarea n binar va fi cea a numrului pozitiv 24-6=10 i care n binar este 1010. Aceeai reprezentare se obine pornind de la reprezentarea lui +6 i folosind regula de mai sus. Alte coduri de reprezentare a valorilor ntregi sunt: 1. Codul direct Bitul de rang n-1 (cel mai din stnga) este rezervat pentru semn. Un numr negativ se reprezint n cod direct reprezentnd modulul su dup care bitul de semn ia valoarea 1. 2. Codul invers Bitul de rang n-1 (cel mai din stnga) este rezervat pentru semn. Un numr negativ se reprezint n cod invers reprezentnd modulul su dup care se inverseaz valorile tuturor biilor reprezentrii. Calculatoarele actuale folosesc codul complementar pentru reprezentarea ntregilor. Avantajul acestui cod const n faptul c circuitele electronice pentru adunare i scdere nu trebuie s examineze semnul numrului (vor efectua ntotdeauna adunri). n plus, n acest cod, valoarea 0 (zero) are reprezentare unic. Reprezentarea numerelor reale Reprezentarea numerelor reale se poate face n virgul fix sau n virgul mobil. Pentru reprezentarea numerelor reale n virgul fix se folosete bitul cel mai semnificativ ca bit de semn. Modulul prii ntregi i partea fracionar au un numr prefixat de bii pe care se reprezint i se aplic urmtoarele reguli: alinierea n locaia de memorie se face la virgula virtual. dac valoarea prii ntregi este mai mic dect valoarea maxim ce poate fi reprezentat pe biii alocai prii ntregi se adaug la stnga zerouri suplimentare. dac valoarea prii ntregi este mai mare dect valoarea maxim ce poate fi reprezentat pe biii alocai prii ntregi se pierd cifrele cele mai semnificative. dac valoarea prii fracionare este mai mic dect valoarea maxim ce poate fi reprezentat pe biii alocai prii fracionare se adaug la dreapta zerouri nesemnificative. dac valoarea prii fracionare este mai mare dect valoarea maxim ce poate fi reprezentat pe biii alocai prii fracionare se pierd cifrele cele mai nesemnificative.

Exemple:

Exemplu

S presupunem c se folosesc 2 octei (16 bii) pentru reprezentarea numerelor reale, din care bitul de rang 15 va fi folosit pentru semn, 6 bii vor fi folosii pentru reprezentarea prii ntregi i 9 bii pentru reprezentarea prii fracionare.

Numrul 19.270751953125 are reprezentarea binar (10011.010001010101). Reprezentarea acestui numr va fi: Numrul negativ -19.270751953125 are reprezentarea binar ca i cea a numrului pozitiv, cu deosebirea c bitul de semn este 1:

Curs 2

Baze de numeraie, reprezentarea numerelor

In schimb, 243.270751953125 are reprezentarea binar (11110011,010001010101) i partea ntreag a numrului este mai mare dect valoarea maxim reprezentabil pe cei 6 bii alocai prii ntregi. Astfel, acest numr se va reprezenta sub forma: producndu-se o aa-numit depire, adic pierzndu-se 2 bii cei mai semnificativi, numrul reprezentat fiind de fapt 51. 270751953125. Reprezentarea n virgul mobil a numerelor reale este un tip superior de reprezentare, astfel conceput nct la depire se pierd cifrele cele mai puin semnificative. Aceast reprezentare se bazeaz pe faptul c orice numr real x se poate scrie sub forma:

x 0.m be
unde m este mantisa numrului, b este baza de numeraie, iar e este exponentul. In notaia tiinific, numerele reale se noteaz sub forma: Exemple: Valoare real 125,7323 -10,375 -0,00642 mantisa baza Notaie tiinific 1.257323102 -1.0375101 -6.4210-3
exponent

Scrierea valorilor reale sub forma x 0.m be este o scriere cu mantis subunitar, n baza 10. Orice valoare real poate fi scris ns i sub forma:

x 1.m 2e
care nseamn scrierea numrului n baza 2, cu mantis ntre 1 i 2, m fiind partea fracionar a mantisei. Valorile date mai sus ca exemplu se scriu n baza 2 sub urmtoarea form: Zecimal 125,7323 -10,375 -0,00642 Zecimal 125,7323 -10,375 -0,00642 Binar 1111101.101110110111 1010.011 0.00000001101001001 Semn + -

Reprezentarea cu mantis ntre 1 i 2 1.11110110111011011126 -1.01001123 -1.1010010012-8

Astfel, din exemplele de mai sus rezult c pentru reprezentarea valorilor reale n virgul flotant trebuie folosit un anumit numr de bii, care s permit reprezentarea: - semnului numrului - mantisei - exponentului - semnului exponentului Pentru aceasta, se folosete standardul IEEE (Institute of Electrical and Electronics Engineers), pentru reprezentarea numerelor n simpl precizie (pe 32 bii) sau n dubl precizie (pe 64 bii).

10

Curs 2

Baze de numeraie, reprezentarea numerelor

Bitul de semn: - 0 corespunde unui numr pozitiv i 1 corespunde unui numr negativ Exponentul Pe numrul de bii rezervai pentru exponent trebuie reprezentate att numere pozitive ct i negative. n acest scop, exponentului propriu-zis al numrului care se reprezint i se adaug o anumit valoarea care depinde de tipul de precizie folosit (simpl sau dubl), numit caracteristic. n standardul IEEE simpl precizie aceasta are valoarea de 127 (27-1) i n dubl precizie are valoarea 1023 (210-1). Astfel, pentru un numr al crui exponent este 0, pe biii alocai exponentului se stocheaz valoarea 127 (n binar 01111111). O valoare de 200 (n binar 11001000) stocat pe biii exponentului nseamn de fapt exponentul 200-127=73. Exponenii cu toi biii 0 sau toi biii 1 sunt rezervai pentru numere speciale. Pentru standardul dubl precizie se aloc 11 bii pentru exponent, iar caracteristica este 1023. Mantisa Mantisa reprezint biii de precizie ai unui numr. Aceasta este compus dintr-un bit implicit principal (ntotdeauna 1 n scrierea cu mantis ntre 1 i 2) i biii fraciei. Pentru a afla bitul implicit principal se ine cont de faptul c n notaia tiinific orice numr poate fi reprezentat n mai multe feluri. Astfel, numrul 5 poate fi reprezentat ntr-unul din modurile urmtoare: 5.00100 0.05102 500010-3 n scopul maximizrii cantitii de numere reprezentabile, numerele floating point sunt stocate n form normalizat, form care se obine punnd punctul zecimal dup prima cifr nenul. n form normalizat, numrul 5 este reprezentat sub forma: 5100. In baza 2, singura cifr nenul nu poate fi alta dect cifra 1, astfel nct nu este necesar ca ea s fie reprezentat explicit i n simpl precizie de exemplu, toi cei 23 de bii sunt folosii pentru reprezentarea prii fracionare a mantisei, obinndu-se practic o precizie de 24 bii folosind doar 23 de bii. In zecimal, precizia corespunztoare obinut este:

24 = 7.2 adic de 7 cifre n simpl precizie i log210


52 =15.65 adic 15 cifre n dubl precizie. log210
Astfel, n simpl precizie, cei 32 bii alocai reprezentrii unui numr n virgul flotant sunt: - 1 bit pentru semnul mantisei (bitul de rang 31) - 8 bii pentru exponent (care va include i semnul exponentului, biii de rang 23-30) - 23 de bii pentru mantis (biii de rang 0-22)

n cazul reprezentrii cu mantis ntre 1 i 2, cifra 1 din stnga virgulei nu are bit rezervat, cifra adugndu-se numai n timpul calculelor.

11

Curs 2

Baze de numeraie, reprezentarea numerelor

nr.bii[rangul biilor] Semn Exponent Simpl precizie Dubl precizie 1 [31] 8 [30-23]

Fracie 23 [22-00]

Caracteristic 127 1023

1 [63] 11 [62-52] 52 [51-00]

Valoarea V reprezentat pe un astfel de cuvt de 32 bii se obine n felul urmtor (E reprezint e+caracteristica):

Dac 0<E<255 atunci V=(-1)S*2E-127*1.F unde "1.F" reprezint numrul binar creat prin adugarea la partea fracionar a prii ntregi 1. Dac E=255 (toi biii exponentului sun setai pe valoarea 1) i F este nenul, atunci V=NaN ("Not a number") Dac E=255 (toi biii exponentului sun setai pe valoarea 1), F este nul i S =1, atunci V= Dac E=255 (toi biii exponentului sun setai pe valoarea 1), F este nul i S = 0, atunci V=+ Dac E=0 (toi biii exponentului sunt 0), F este zero (toi biii prii fracionare sunt 0) i S =1, atunci V=-0 Dac E=0 (toi biii exponentului sunt 0), F este zero (toi biii prii fracionare sunt 0) i S =0, atunci V=+0

Aadar, ca reguli sunt stabilite reprezentrile pentru valoarea zero, precum i pentru valorile i respectiv pentru "valorile NaN. In figura de mai jos sunt date cteva valori reprezentate n virgul flotant n standardul IEEE simpl precizie. Exemplu de valori reprezentate n simpl precizie Valoare n zecimal bitul de semn 1 bit 7/4 -34.432175 -959818 +0 -0 cel mai mic numr reprezentabil cel mai mare numr reprezentabil infinit NaN 0 1 1 0 1 0 0 0 0 exponentul E=e+c 8 bii 01111111 10000100 10010010 00000000 00000000 00000000 11111110 11111111 11111111 fracia rezultat din mantis normalizat 23 bii 11000000000000000000000 00010011011101010001100 11010100101010010100000 00000000000000000000000 00000000000000000000000 00000000000000000000001 11111111111111111111111 00000000000000000000000 Nu toi biii 0 sau 1

12

Curs 2

Baze de numeraie, reprezentarea numerelor

Simpl precizie Cel mai mic nr. pozitiv Valoarea a mainii Precizia zecimal 2
-126

Dubl precizie
-38

sau 1.175 x 10

-1022

sau 2.225 x 10-308

Cel mai mare nr. pozitiv (2- 2-23) 2127 sau 3.403 x 1038 (2- 2-52) 21023 sau 1.798 x 10308 2-23 sau 1.192 x 10-7 6 cifre semnificative 2-52 sau 2.220 x 10-16 15 cifre semnificative

Cel mai mic numr real pozitiv care poate fi reprezentat n simpl precizie are reprezentarea: 00000000100000000000000000000000 care nseamn: 1.0 * 2e. Partea fracionar este zero deoarece toi cei 23 de bii folosii pentru reprezentarea acesteia sunt setai pe zero. La partea fracionar se adaug partea ntreag corespunztoare bitului "ascuns" 1 (care nu se reprezint n acest format simpl i dubl precizie). Valoarea exponentului e se deduce innd cont c pe biii exponentului este reprezentat valoarea e+127. Cum E este (00000001)2 = 110, rezult e=-126. Aadar, valoarea celei mai mici valori reale care poate fi reprezentat este: 1.0*2-126=1.17549435110-38 Analog se deduce uor valoarea celui mai mare numr real care poate fi reprezentat n simpl precizie, aceasta avnd reprezentarea binar: 01111111011111111111111111111111 Atenie, nu putem folosi toi biii exponentului setai pe 1 deoarece acest caz este utilizat pentru reprezentarea valorilor speciale i Nan. Din reprezentarea de mai sus rezult c E=28-1 -1=28-2, adic e=28-2-127=28-2-27-1 = 2(27-1)-271=27-1=127. A, aceast valoare va fi: (1.11111111111111111111111)22127. Valoarea prii fracionare este: 2-1+2-2++2-23 = =2-1 (2-23-1)/(2-1-1)=1-2-23 Aadar, cel mai mare numr pozitiv reprezentabil este: (1+1-2-23*2127 = 3.402823467 1038 Precizia reprezentrii numerelor este dat de urmtoarele exemple: Valoarea 1.0 se reprezint: 00111111100000000000000000000000 Urmtoarea valoare reprezentabil, imediat mai mare ca 1.0 va avea reprezentarea: 00111111100000000000000000000001 Diferena dintre aceste valori este dat de prezena pe poziia cel mai puin semnificativ din biii mantisei, a bitului 1. Poziia i valoarea acestui bit nseamn n zecimal valoarea 0.0000001192. Aceast valoarea d precizia acestei reprezentri. Aadar, n acest format, numerele reale nu sunt reprezentate continuu ci discret, cu un pas de 1.119210-7. Valoarea "Not A Number" Valoarea NaN este folosit pentru a reprezenta valori care nu reprezint un numr real. Aceste valori NaN sunt reprezentate printr-o succesiune de bii cu exponentul avnd toi biii 1 i o fracie nenul.
13

Curs 2

Baze de numeraie, reprezentarea numerelor

Exist dou feluri de valori Nan: QNaN (Quiet NaN) i SNaN (Signalling NaN). QNaN este un NaN cu cei mai semnificativi bii ai fraciei setai i rezult din operaii aritmetice cnd rezultatul matematic nu este definit. SNaN este un NaN cu cei mai semnificativi bii a fraciei teri i astfel de valori sunt folosite pentru a semnala excepii. Semantic, QNaN semnific operaie nedeterminat, iar SnaN semnific operaie invalid. Care va fi reprezentarea numrului -10.375, n virgul flotant, simpl precizie? 1. Numrul pozitiv se transform n binar i se obine: 1010.011 2. Se scrie numrul obinut n binar sub form normalizat: 1.01001123 3. Se determin valoarea exponentului: 3+127=130 4. Se transform noul exponent n binar: (130)10=10000010 5. Se determin bitul de semn al mantisei: 1 6. Se scrie numrul:

Exemplu:

Observaie: Numrul real 18.0 nu are reprezentare identic cu cea a numrului ntreg 18.

14

S-ar putea să vă placă și