Sunteți pe pagina 1din 7

2.

2 – Reprezentarea numerelor în virgulă flotantă 18

2. REPREZENTAREA NUMERELOR ÎN COD


ZECIMAL CODIFICAT BINAR. REPREZENTAREA
NUMERELOR ÎN VIRGULĂ FLOTANTĂ

2.1. Reprezentarea numerelor în cod zecimal codificat binar


Pentru comunicarea vizuală între un echipament numeric şi operatorul uman
este necesară utilizarea unui dispozitiv de afişare. Fiecare cifră zecimală care se
afişează se reprezintă pe patru biţi (digit), astfel încât pe un octet se pot reprezenta
două cifre zecimale. Această codificare poartă denumirea de cod zecimal codificat
binar (binary coded decimal = BCD).
Acest tip de reprezentare se caracterizează prin faptul că fiecărei cifre zecimale
îi este atribuit un grup de cifre 4 binare (digit sau nibble).
Exemplu:
N = 759(10)
Reprezentarea în cod BCD a numărului N este:
0111 0101 1001

7 5 9

Operaţia de adunare se realizează în modul următor: se converteşte fiecare


operand în cod BCD şi se adună digit cu digit. Corecţia de 6 se aplic ă în situa ţiile în
care în urma adunării a doi digiţi se obţine transport către digitul mai semnificativ, sau
când suma a doi digiţi are echivalentul zecimal mai mare decât cifra 9 (1001). Operaţia
de corecţie de 6 constă în adunarea echivalentului binar al cifrei 6 (0110) la digitul
aflat într-una din situaţiile descrise mai sus.

Aplicaţia 1
Să se efectueze operaţia de adunare în cod BCD: 437+578
437 = 010000110111
+578 = 010101111000
1015 100110101111
01100110
101000010101
0110
1 000000010101

0 1 5
19 Reprezentarea nr. în cod BCD. Reprezentarea nr. în virgulă flotantă - 2

2.2. Reprezentarea numerelor în virgulă flotantă


În cazul reprezentării numerelor în virgulă fixă, poziţia virgulei nu mai poate fi
schimbată, chiar dacă ea nu mai este reprezentată fizic în calculator. Dacă virgula este
amplasată după cifra de semn, se lucrează cu numere fracţionare subunitare. Deoarece
nu toate numerele sunt subunitare, pentru a le aduce la această formă trebuie executate
o serie de operaţii de scalare (multiplicare cu un anumit factor de scală) sau deplasare,
ataşând numerelor factori de scală. Evidenţa acestora trebuie realizată prin program,
motiv pentru care acestea se complică.
Această problemă se poate rezolva utilizând reprezentarea numerelor în virgulă
flotantă (mobilă). Astfel, poziţia virgulei variază automat pentru fiecare număr,
factorul de scală devine o parte a cuvântului din calculator, ceea ce conduce la
simplificarea programelor.
Un număr reprezentat în virgulă mobilă are trei componente. Prima
componentă este mantisa, care indică valoarea exactă a numărului într-un anumit
domeniu, fiind reprezentată de obicei ca un număr fracţionar. Utilizând forma
normalizată a reprezentării numerelor, mantisa este reprezentată prin intermediul
fracţiei (partea fracţionară a mantisei).
A doua componentă este exponentul, care indică ordinul de mărime al
numărului. A treia componentă o constituie semnul. Considerând un număr N,
reprezentarea acestuia în virgulă mobilă poate avea forma următoare:
(2.1)
unde M este mantisa, B este baza sistemului de numeraţie, iar E reprezintă
exponentul.
Mantisa este reprezentată sub forma:
(2.2)
Fiecăruia dintre aceste trei elemente îi este alocat un câmp.
De exemplu, considerându-se un cuvânt alcătuit din 32 de biţi, o asignare posibilă a
biţilor la fiecare câmp poate fi următoarea:
31 30 23 22 0
Caracteristica Fracţie
Semn (Exponent deplasat) F
S C

Fig. 2.1. Format de reprezentare pe 32 de biţi.

După cum se observă din figura 2.1 şi din relaţia (2.1), nu există câmp rezervat
pentru reprezentarea bazei B, deoarece aceasta este implicită şi este aceeaşi pentru
toate numerele exprimate în acelaşi tip de reprezentare.
Semnul numărului are alocat un câmp separat ocupat de bitul 0 dacă numărul
este pozitiv şi 1 dacă numărul este negativ.
Pentru a nu se aloca un câmp separat şi pentru semnul exponentului, în locul
acestuia se reprezintă o valoare denumită caracteristică, ce se obţine prin adunarea
2.2 – Reprezentarea numerelor în virgulă flotantă 20

unui deplasament la exponent, astfel încât să rezulte întotdeauna o valoare pozitivă.


Deci, caracteristica C reprezintă exponentul deplasat:
(2.3)
Valoarea reală a exponentului se poate afla prin scăderea deplasamentului din
caracteristica numărului. De exemplu, dacă pentru caracteristică se rezervă un câmp de
8 biţi, valorile caracteristicii pot fi cuprinse între 0 şi 255. Exponentul poate fi negativ
dacă C < 127, pozitiv dacă C > 127 şi 0 dacă C = 127. În scopul creşterii preciziei şi a
simplificării operaţiilor cu numere în virgulă flotantă, se utilizează forma normalizată a
reprezentării. Un număr este considerat normalizat dacă cel mai semnificativ bit al lui
este 1. Astfel, acesta este considerat bit ascuns, deoarece nu mai trebuie memorat, el
fiind implicit. Aceasta permite ca mantisa să aibă un bit semnificativ în plus. Dacă se
utilizează reprezentarea în cod semn şi modul, pe un cuvânt de 32 de biţi se pot
reprezenta toate numerele întregi cuprinse între şi , iar dacă se
utilizează reprezentarea în cod complement faţă de 2, intervalul de numere este cuprins
între şi . În figura 2.2 se indică gama de numere ce pot fi reprezentate pe
32 de biţi. În acest format se pot reprezenta numere în următoarele domenii:
-numere pozitive între şi .
-numere negative între şi .
Se observă cinci zone care nu sunt cuprinse în aceste domenii:
-numere negative mai mici decât care determină o depăşire
superioară negativă
-numere negative mai mari decât care determină o depăşire
inferioară negativă
-zero
-numere pozitive mai mici decât care determină o depăşire
inferioară pozitivă
-numere pozitive mai mari decât care determină o depăşire
superioară pozitivă
Depăşirea superioară apare atunci când exponentul depăşeşte valoarea
maximă. Depăşirea inferioară apare atunci când exponentul are o valoare negativă
prea mică. În cazul depăşirii inferioare, rezultatul se poate aproxima cu 0. În scopul
creşterii preciziei şi a lărgirii domeniului de reprezentare se utilizează un număr mai
mare de biţi pentru reprezentare. Cele mai multe calculatoare utilizează cel puţin două
formate: în simplă precizie (32 de biţi) şi în dublă precizie (64 de biţi).

Reprezentarea numerelor în Standardul IEEE 754


Pentru a facilita portabilitatea programelor de la un calculator la altul şi pentru
a încuraja dezvoltarea programelor complexe orientate pe calcule numerice, Societatea
de Calculatoare a organizaţiei IEEE (Institute of Electric and Electronic Engineers) a
elaborat un standard pentru reprezentarea numerelor în virgulă mobilă şi pentru
operaţii aritmetice în această reprezentare. Acest standard a fost publicat în 1985.
21 Reprezentarea nr. în cod BCD. Reprezentarea nr. în virgulă flotantă - 2

Întregi reprezentabili

-231 0 231-1
a) Întregi in C2

Depăşire Numere negative Depăşire Depăşire Numere pozitive Depăşire


superioară reprezentabile inferioară inferioară reprezentabile superioară
negativă negativă pozitivă pozitivă

-3,4x1038 -1,5x10-38 0 1,5x10-38 3,4x1038

b) Numere reprezentate în virgulă flotantă

Fig. 2.2. Numere reprezentabile pe 32 de biţi.

Standardul IEEE 754 defineşte următoarele formate sau precizii: precizie


simplă, precizie simplă extinsă, precizie dublă şi precizie dublă extinsă. Parametrii
principali ai formatelor precizie simplă şi precizie dublă sunt prezentaţi în tabelul 2.1.

Tabelul 2.1. Parametrii formatelor definite de standardul IEEE 754.


Precizie simplă Precizie dublă
Biţi ai mantisei 23 52
Exponent real maxim 128 1024
Deplasament exponent 127 1023

Toate formatele definite de standardul IEEE 754 utilizează baza 2. Valorile


unui număr reprezentat în precizie simplă NS şi în precizie dublă ND sunt:
(2.4)
(2.5)
După cum s-a arătat în paragraful anterior, un număr normalizat are cel mai
semnificativ bit 1 care nu se mai memorează, fiind considerat bit ascuns. Acest bit este
utilizat şi în format IEEE 754. Astfel mantisa (denumită şi significand) este
reprezentată sub forma:
(2.6)
unde 1 este bitul ascuns (partea întreagă), iar F reprezintă biţii fracţiei. Virgula
binară este implicită în reprezentare. Dacă toţi biţii fracţiei sunt 0, mantisa este 1,0;
dacă toţi biţii fracţiei sunt 1, mantisa este cu puţin mai mică decât 2,0. Deci
.
După cum se observă din figura 2.3, în standardul IEEE 754 câmpurile de
reprezentare ale semnului, exponentului şi fracţiei în formatele pe 32 şi respectiv pe 64
de biţi au următoarele dimensiuni:
Precizie simplă (32 de biţi):
2.2 – Reprezentarea numerelor în virgulă flotantă 22

-semn: 1 bit
-exponent deplasat: 8 biţi
-fracţie: 23 biţi
Precizie dublă (64 de biţi):
-semn: 1 bit
-exponent deplasat: 11 biţi
-fracţie: 52 biţi
31 30 23 22 0
Semn Caracteristica Fracţie Precizie simplă
S (Exponent deplasat) F
C
Întreg implicit
(bit ascuns)

63 62 52 51 0
Caracteristica Fracţie
Semn (Exponent deplasat) Precizie dublă
S F
C
Întreg implicit
(bit ascuns)

Fig. 2.3. Formatele cu precizie simplă şi dublă definite de standardul IEEE 754.

Observaţie :
Pentru cazul în care apare o depăşire superioară, există o reprezentare specială
pentru infinit, constând din exponentul cu valoarea maximă pentru formatul respectiv,
şi mantisa egală cu 0. În funcţie de bitul de semn, sunt posibile două reprezentări
pentru infinit, +∞ şi –∞. Valoarea infinit se poate utiliza ca operand, utilizând reguli
ca:
, ,
Astfel, utilizatorul poate decide dacă va trata depăşirea superioară ca o condiţie
de eroare, sau va continua calculele cu valoarea infinit. Pentru indicarea diferitelor
condiţii de excepţie, ca în cazul operaţiilor nedefinite de forma , , ,
, , sau extragerea rădăcinii pătrate dintr-un număr negativ, s-a prevăzut
un format special, care nu reprezintă un număr obişnuit, fiind numit NaN (Not a
Number). Exponentul are valoarea maximă posibilă, iar mantisa este diferită de 0.
Aplicaţia 2
Să se reprezinte în virgulă mobilă în precizie simplă standard IEEE 754
numărul N = -7254,390625(10)
Se reprezintă numărul în baza 2.
N = -1110001010110,011001
Se normalizează numărul aducând virgula după primul 1.

Exponentul este 12. Rezultă caracteristica:


23 Reprezentarea nr. în cod BCD. Reprezentarea nr. în virgulă flotantă - 2

C = 12+127=139 cu reprezentarea în binar 10001011.


Fracţia este partea zecimală a numărului N normalizat, adică 110001010110011001.
Reprezentarea numărului este următoarea:
31 30 23 22 0
11000101011001100100000 Precizie
1 10001011 simplă

Întreg implicit
(bit ascuns)

Completându-se cu 0 poziţiile rămase libere până la 32 de biţi, reprezentarea în


hexazecimal a numărului N este C5E2B320(16).

Reprezentarea numerelor în format standard IBM S/360,370


Toate formatele definite de standardul IBM utilizează baza 16. În mod similar
cu standardul IEEE 754, se utilizează formate în simplă precizie (32 de biţi) şi în dublă
precizie (64 de biţi).
După cum se observă din figura 2.4, în standardul IBM S/360,370 câmpurile
de reprezentare ale semnului, exponentului şi fracţiei în formatul pe 32 de biţi au
următoarele dimensiuni:
Precizie simplă (32 de biţi):
-semn: 1 bit
-exponent deplasat: 7 biţi
-fracţie: 24 biţi
31 30 24 23 0
Semn Exponent Fracţie Precizie
S E F simplă

Fig. 2.4. Formatul cu precizie simplă definit de standardul IBM S/360,370.

Valoarea unui număr în precizie simplă NS este:


(2.7)
În câmpul exponentului se reprezintă numere întregi în exces de 64 şi pentru
toate versiunile este format din 7 biţi. Mantisa este un număr fracţionar reprezentat în
semn şi modul, nefolosindu-se soluţia bit ascuns. Aşadar, mantisa este de forma:
(2.8)
Baza nu mai este 2, ci 16 iar normalizarea se face în consecinţă, fiecare
incrementare sau decrementare a exponentului executându-se mutând virgula la stânga
sau la dreapta cu 4 poziţii binare ( ).
În acest standard nu avem posibilitatea de a reprezenta situaţii speciale de tipul
NaN-not a number, nici de depăşire, nici de denormalizare, iar zero este reprezentat cu
zero peste tot. Datorită bazei 16 câmpul valoric de reprezentare a numerelor pozitive
este mult mai mare: între şi .
2.2 – Reprezentarea numerelor în virgulă flotantă 24

Aplicaţia 3
Să se reprezinte în virgulă mobilă în precizie simplă standard IBM numărul
N = 6450,15625(10)
Se reprezintă numărul în baza 2.
N = 1100100110010,00101(2)
Se normalizează numărul mutând virgula după un multiplu de 4 poziţii binare.

Exponentul este 3. Rezultă caracteristica:


C = 3+64=67 cu reprezentarea în binar 1000011.
Fracţia este partea zecimală a numărului N normalizat, adică 10010011001000101.
Reprezentarea numărului este următoarea:
31 30 24 23 0

0 1000011 100100110010001010000000 Precizie


simplă
Întreg implicit
(bit ascuns)

Completându-se cu 0 poziţiile rămase libere până la 32 de biţi, reprezentarea în


hexazecimal a numărului N este 43932280(16).

2.3. Aplicaţii propuse

1. Să se reprezinte în virgulă flotantă, cu precizie simplă, în standardele IEEE


754 şi IBM următoarele numere:
-36728,781250; -0,645324; -9535,9765625; -6743,65437; 1,6754; 99999,9898;
3456216,78644; 65,1111101
2. Să se reprezinte în virgulă flotantă, cu precizie dublă, în standardele IEEE
754 şi IBM următoarele numere:
76330001,456; -5337,89998889; 1,11111111; -1111111,2222222.

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