Sunteți pe pagina 1din 12

Reprezentri binare ale numerelor reale

Aa cum am mai spus, n calculator se face difereniere ntre numerele


ntregi i numerele reale. In fapt, termenul de numr real este impropriu n acest
context, deoarece spaiul finit de reprezentare permite reprezentarea numai a unei
submulimi finite de numere raionale. Reinem deci c orice numr real se
reprezint n calculator aproximat printr-un numr raional.
Pentru astfel de reprezentri exist o constant prestabilit n, care indic pe
ci bii se realizeaz reprezentarea. De regul, n este un multiplu de 8
(reprezentarea se face pe un numr ntreg de octei). Frecvent, reprezentrile se fac
pe cuvnt sau pe dublucuvnt.
Reprezentarea semnului se face folosind bitul de semn. Bitul de semn are
valoarea 0 pentru a indica un numr pozitiv i valoarea 1, pentru a indica un numr
negativ.
Sunt utilizate dou tipuri de reprezentri binare ale numerelor reale:
- reprezentarea n virgul fix i
- reprezentarea n virgul flotant
Reprezentarea n virgul fix
Este o reprezentare natural care pune n eviden semnul, partea ntreag i
partea fracionar a numrului. Dimensiunile locaiei de memorie n care se
reprezint un numr n virgul fix este prefixat: 8, 16, 32 sau 64 de bii. Pentru a
putea fi reprezentate, numerele sunt convertite (automat) n baza 2, aa cum am
vzut n 1.2.2.
n acest mod de reprezentare, bitul cel mai semnificativ este rezervat
semnului (0 pentru + i 1 pentru -). Urmeaz partea ntreag (mai exact cifrele
prii ntregi ale valorii absolute a numrului) i apoi partea fracionar, ambele
avnd dimensiuni (n bii) prefixate. Pentru a se reprezenta un numr real, se
consider reprezentarea lui n baza 2. In locaia de memorie sunt plasai biii
reprezentrii, alinierea fcndu-se la virgula virtual. In cursul reprezentrii sunt
aplicate urmtoarele reguli:
- dac partea ntreag a numrului are prea puine cifre, se adaug la stnga
zerouri suplimentare;
- dac partea ntreag are prea multe cifre, se pierd cifrele cele mai
semnificative ce depesc spaiul de reprezentare;
- dac partea fracionar are prea puine cifre, se adaug la dreapta zerouri
nesemnificative;

- dac partea fracionar are prea multe cifre, se pierd cifrele cele mai
nesemnificative care depesc spaiul de reprezentare rezervat.
Poziia virgulei este virtual, fiind plasat dup bitul 0 al prii ntregi i
naintea bitului -1 al prii fracionare.
S presupunem c reprezentarea se face ntr-o locaie de 16 bii, la care sunt
rezervai 6 bii pentru partea ntreag i 9 bii pentru partea fracionar.
15 14 13
S

12

11

10

parte ntreag

parte fracionar
virgul virtual

S considerm, spre exemplu, numrul (+10011,0101010101)2. El se va


reprezenta n aceast locaie adugnd un 0 la partea ntreag i pierznd ultima
zecimal (cea de-a 10-a). Bitul de semn va fi 0. Configuraia obinut o dm mai
jos att n binar, ct i n hexazecimal. (Cititorul trebuie s se obinuiasc s
converteasc rapid din baza 2 n baza 16, cum am artat n 1.3.3, deoarece
scrierea hexazecimal este mult mai la ndemn):
0010011010101010

26AA

In mod similar numrul (-10011,0101010101)2 se va reprezenta (se


modific doar bitul de semn):
1010011010101010
= A6AA
Numrul (+11110011,0101010101)2 se va reprezenta pierzndu-se dou
cifre semnificative de la partea ntreag:
0110011010101010

66AA

Reprezentarea n virgul fix limiteaz gama numerelor reprezentabile


astfel. Fie n este lungimea n bii a locaiei, I numrul de bii rezervai pentru
partea ntreag, iar F numrul de bii rezervai pentru partea fracionar. Rezult c
n = 1+I+F
Cu aceste notaii, x 0 reprezentabil verific relaia:
2-F x 2I - 2-F

Dubla inegalitate este verificabil imediat dac punem n eviden cel mai mic i
cel mai mare numr.
Cel mai mic numr pozitiv reprezentabil este (0...0,0...01) 2 avnd I zerouri
la partea ntreag i F-1 zerouri la partea fracionar. Valoarea acestui numr este:
minim = 2-F
Cel mai mare numr pozitiv reprezentabil este (1...1,1...1) 2 avnd I cifre 1
la partea ntreag i F cifre 1 la partea fracionar. Acest numr poate fi scris ca
rezultat al diferenei cu I+1 cifre la partea ntreag i F cifre la partea fracionar:
10...0,0...00 0,0...01
------------1...1,1...11
Dar desczutul are valoarea 2I i scztorul are valoarea 2-F, atunci cel mai mare
numr are valoarea:
MAXIM = 2I-2-F
Reprezentarea n virgul flotant
Principalul dezavantaj al reprezentrii n virgul fix este faptul c, dac un
numr nu mai ncape n spaiul de bii rezervat, se pierd cifrele cele mai
semnificative! Reprezentarea n virgul flotant este astfel conceput, nct, la
depire, se pierd cifrele cel mai puin semnificative!
Se tie c orice numr real x se poate scrie astfel:
x = 0,m be
unde:
m - este mantis numrului;
b - este o baz de numeraie;
e - este un exponent.
Spre exemplificare, redm urmtoarele egaliti, cu b = 10. Se
observ c un numr poate avea mai multe astfel de reprezentri.
(125,7323)10

= 0,1257323 103 = 0,00001257323 107

(0,0001257323)10 = 0,01257323 10-2 = 0,1257323 10-3


Plecnd de la acest mod de scriere a numerelor, exist diverse variante de
reprezentare, pe care le vom defini n cele ce urmeaz.
DEFINITIA 3.4 Un numr real x se scrie cu mantis subunitar i exponent
al unei baze b, dac x = 0,m be.
DEFINITIA 3.5 Un numr real x, x 0, este scrie cu mantisa subunitar
normalizat, dac x este scris cu mantis subunitar i exponent al bazei b i dac
are loc inegalitatea

1
_m_ <1 1.
b

De exemplu, pentru b = 10, numerele 0,1257323 103 i 0,1257323 10-3


sunt scrise normalizat.
Inmulirea numerelor scrise cu mantis subunitar provoac frecvent
apariia mai multor cifre 0 imediat dup virgul. De aceea, se impune ca dup
aproape fiecare operaie de nmulire s se efectueze i o operaie de normalizare.
In scopul reducerii normalizrilor, se mai folosete un mod de scriere oarecum
diferit.
DEFINITIA 3.6 Un numr real x, x 0, este scris cu mantisa ntre 1 i 2,
dac x se scrie n baza 2, astfel:
x = 1,m 2e
Spre exemplu, au loc egalitile:
(128,25)10 = (10000000,01)2 = (1,000000001)227
Se observ c mantisa se nmulete cu o putere a lui 2 aparine i ea aparine
intervalului [1,2). La acest mod de scriere, se noteaz cu m partea fracionar a
mantisei.
DEFINITIA 3.7 Un numr real x este reprezentat n calculator n virgul
flotant dac pentru determinarea reprezentrii se pleac de la scrierea lui x cu
mantis subunitar sau cu mantis ntre 1 i 2.

Modul de scriere de la care se pleac depinde de tipul calculatorului.


Calculatoarele mai vechi (pn la generaia a III-a) folosesc scrierea cu mantis
subunitar. Calculatoarele actuale folosesc scrierea cu mantis ntre 1 i 2.
Indiferent de tipul calculatorului, mantisa se va reprezenta n baza 2.
Pentru reprezentarea ntregului numr este rezervat un numr standard de n
bii. Semnificaiile acestor bii sunt:
s
1

m
M

t
1

e
E

s de 1 bit reine bitul de semn al mantisei;


m reprezentat pe M bii reine cifrele mantisei dac este vorba de mantis
subunitar, sau partea de dup virgul a mantisei dac este vorba de mantis
supraunitar;
t reine bitul de semn al exponentului,;
e avnd E bii conine cifrele exponentului.
Dac n este dimensiunea locaiei de reprezentare, avem n = 2+M+E. In cazul
reprezentrii cu mantisa ntre 1 i 2, cifra 1 din stnga virgulei nu are bit rezervat!
Calculatorul, tiind c este vorba de aceast reprezentare, adaug acest bit de
valoare 1 numai n timpul calculelor.
Majoritatea calculatoarelor, din raiuni tehnice, nlocuiesc bitul t de semn al
exponentului, folosind n schimb reprezentri de forma:
s
1

m
M

c
E

n care c este o mrime numit caracteristic. Valoarea ei se obine adunnd la


exponentul e o constant a reprezentrii q, numit exces de exponent
(deplasament, increment etc.). Deci:
c=e+q
Valorile posibile (numai numere ntregi) ale lui e sunt:
0 e + q 2E - 1 -q e 2E -1 - q
Valoarea constantei q este o constant constructiv a calculatorului. De obicei, ea
are una dintre valorile:

E
E
1
+1

2
2
E -1
q = 2 sau q = sau q =
2 2

Din modul de reprezentare rezult c un numr real se reprezint n virgul


flotant aproximativ, avnd, n funcie de tipul mantisei, maximum M sau M+1
cifre binare semnificative. De asemenea, ordinul de mrime este de asemenea
limitat de numrul de bii rezervai caracteristicii.
S vedem acum care este cel mai mic numr pozitiv reprezentabil i care
este cel mai mare numr pozitiv reprezentabil. Cu notaiile de mai sus, aceste
valori sunt urmtoarele:
Cel mai mic strict pozitiv n convenia reprezentrii subunitare nenormalizate este:
minim = 0,0...01b-q = 2-M b-q
In convenia reprezentrii cu mantisa ntre 1 i 2, el este:
minim = 1,0...012-q = (1 + 2-M) 2-q
Cel mai mare numr posibil de reprezentat n convenia reprezentrii subunitare
este:
MAXIM

0,1 ... 1 b2

-1- q

= ( 1 - 2-M ) b 2

- 1- q

Cel mai mare numr posibil de reprezentat n convenia reprezentrii supraunitare


este:
MAXIM

= 1,1 ... 1 22

-1- q

= ( 2 - 2-M ) 22

-1- q

O ultim precizare: nu toate numerele dintre "minim" i "MAXIM" pot fi


reprezentate. Toate numerele de acelai ordin i care au aceleai prime M (M+1)
cifre binare sunt identic reprezentate.
Procesoarele moderne adopt convenia supraunitar. In seciunea urmtoare vom
prezenta trei astfel de reprezentri.
Standarde de reprezentare n virgul flotant
Societaea de Calculatoare IEEE [17] a fost cea care s-a preocupat i a
elaborat norme de reprezentare a numerelor n virgul flotant. Aceste norme sunt

astzi standarde "de facto". Practic toate firmele care fabric astzi calculatoare, ca
i toate case de software, i-au nsuit aceste norme i le-au implementat.
Pe lng standardele IEEE, Casa de software Borland folosete la
implementarea Turbo Pascal alte dou moduri de reprezentare. Deoarece mediul
Turbo Pascal este deosebit de rspndit, vom prezenta i aceste moduri de
reprezentare.
Aceste standarde folosesc scrierea numerelor cu mantisa ntre 1 i 2.
In fig. 3.1 sunt redate structurile acestor standarde de reprezentare. Pentru
fiecare tip de reprezentare, se d mai nti numele ei, iar n parantez numrul de
octei ocupai de reprezentare. Se indic apoi deplasamentul q folosit la
caracteristic, deplasament care are una dintre valorile 127, 129, 1023, 16383. In
sfrit, se indic rangul primului i al ultimului bit din fiecare zon, precum i
numrul de bii ocupai de fiecare zon.
Standardele IEEE deosebesc cinci cazuri ce pot s apar la reprezentarea
unui numr x i le interpreteaz conform regulilor ce urmeaz:
a) DACA -q < e < q+1 ATUNCI x = (-1)s1,m2e SF_DACA
b) DAC e = -q i m 0 ATUNCI x = (-1)s0,m2e SF_DACA
c) DAC e = -q i m = 0 ATUNCI x = (-1)s0

SF_DACA

d) DAC e = q+1 i m = 0 ATUNCI x = (-1)soo SF_DACA


e) DAC e = q+1 i m 0 ATUNCI x NU EXISTA!

SF_DACA

Semnificaia lui oo depinde de calculator i de limbajul care manipuleaz


reprezentarea respectiv.
Conveniile Turbo Pascal deosebesc trei cazuri ce pot s apar la
reprezentarea unui numr x i le interpreteaz conform regulilor ce urmeaz:
a) DACA -q < e < q+1 ATUNCI x = (-1)s1,m2e SF_DACA
b) DAC e = -q i m = 0 ATUNCI x = 0

SF_DACA

c) DACA e = -q i m 0 ATUNCI x NU EXISTA!

SF_DACA

S observm faptul c EXTENDED Turbo Pascal memoreaz ntreaga mantis,


inclusiv cifra 1 din stnga virgulei!

IEEE simpl precizie (4 octei):


s c=e+127
m

31 30
23 22
0
1
8
23
nr.bii
IEEE dubl precizie (8 octei):
s c=e+1023
m

63 62
52 51
0
1
11
52
nr.bii
IEEE dubl precizie extins (12 octei):
s c=e+16383
m

95 94
80 79
0
1
15
80
nr.bii
IEEE precizie cvadrupl (16 octei):
s c=e+16383
m

127 126
112 111
0
1
15
112
nr.bii
Turbo Pascal REAL (6 octei):
s
m
c=e+129

47 46
87
0
1
39
8
bii
Turbo Pascal EXTENDED (10 octei):
s c=e+16383 1
m

79 78
64 63 62
0
1
15
1
63
nr.bii
Figura 3.1 Standarde de reprezentare n virgul flotant
Valorile aproximative pentru minim i MAXIM depind n primul rnd de
numrul de bii rezervai pentru caracteristic. Dac se efectueaz calculele n baza
10, se obin valorile aproximative prezentate n continuare.

Pentru caracteristica reprezentat pe 8 bii (IEEE simpl precizie i REAL Turbo


Pascal):
minim 10-38

MAXIM 1038

Pentru caracteristica reprezentat pe 11 bii (IEEE dubl precizie):


minim 10-308

MAXIM 10308

Pentru caracteristica reprezentat pe 15 bii (IEEE dubl precizie extins, IEEE


precizie cvadrupl i EXTENDED Turbo Pascal):
minim 10-4932

MAXIM 104932

Exemple. Mai nti vom arta cum se convertete un numr real n virgul
flotant. S considerm numrul:
(-3572,54)10
pe care intenionm s-l reprezentm n formatul IEEE simpl precizie, IEEE
dubl precizie i REAL Turbo Pascal.
Mai nti l vom converti n baza 16, reinnd 14 cifre hexazecimale semnificative,
care sunt suficiente pentru reprezentrile pe care le avem n vedere, i obinem
numrul:
(-DF4,8A3D708A3D7...)16
Acest numr l trecem n baza 2 i obinem:
(-110111110100,10001010001111010111000010001010001111010111)2
Acum l punem n forma normalizat, aa cum am artat mai sus, i reinem numai
52 de cifre dup virgul:
(-1,1011111010010001010001111010111000010001010001111010)2211
Din aceast form vom prelua, ncepnd cu bitul de dup virgul, atia bii ci
sunt necesari pentru partea de mantis a fiecrei reprezentri. Rescriem numrul
rezultat n baza 16:

(-1,BE9147AE1147)16211
Semnul fiind "-", bitul de semn s va fi 1.
Exponentul e = (11)10, valabil pentru toate cele trei reprezentri.
Caracteristica c difer la cele trei reprezentri:
- simpl precizie:
c = e + 127 = (138)10 = (8A)16 = (10001010)2
- dubla precizie:
c = e + 1023 = (134)10 = (40A)16 = (10000001010)2
- TURBO Pascal:
c = e + 129 = (140)10 = (8C)16 = (10001100)2
In sfrit, colaionnd cele trei zone: semn, caracteristic i mantis, n
locurile i cu numrul de bii specificai, obinem cele trei reprezentri:
- simpl precizie:

11000101010111110100100010100011
2
Grupm acum n tetrade i obinem coninutul hexazecimal al reprezentrii n
simpl precizie:

C55F48A3
16
Procednd analog pentru dubl precizie, obinem:

1100000010101011111010010001010001111010111000010001010001111010

C0ABE9147AE1147A
16
In sfrit, pentru varianta TURBO Pascal, avem:

110111110100100010100011110101110000100010001100
2

DF48A3D7088C
16
n tabelul 3.4 sunt reprezentate numerele 0 (pentru care exist dou
reprezentri) 1, 2, 3, 4 i oo. In antetul celor ase coloane este indicat
numrul total de octei i numrul total de cifre hexazecimale ale reprezentrii.
Reprezentrile sunt scrise n hexazecimal, dar pentru economie de spaiu am
nlocuit prin "..." un ir de cifre egale cu zero.
n
+0
-0
+1
-1
+2
-2
+3
-3
+4
-4
+
-

IEEE
simpl.p.
4 oct.
8 c.h.
0000...
8000...
3F80...
BF80...
4000...
C000...
4040...
C040...
4080...
C080...
7F80...
FF80...

IEEE
dubl.p.
8 oct. 16 c.h.
0000...
8000...
3FF0...
BFF0...
4000...
C000...
4008...
C008...
4010...
C010...
7FF0...
FFF0...

IEEE
extins
12 oct.
24 c.h.
00000...
80000...
3FFF8...
BFFF8...
40008...
C0008...
40008...
C0008...
40018...
C0018...
7FFF0...
FFFF0...

IEEE
cvadrup.
16 oct.
32 c.h.
00000...
80000...
3FFF0...
BFFF0...
40000...
C0000...
40004...
C0004...
40010...
C0010...
7FFF0...
FFFF0...

Turbo
REAL
6 oct.
12 c.h.
00...00
80...00
00...81
80...81
00...82
80...82
40...82
C0...82
00...83
80...83
-

Turbo
EXTEND.
10 oct.
20 c.h.
00000...
80000...
3FFF8...
BFFF8...
40008...
C0008...
4000C...
C000C...
40018...
C0018...
-

Tabelul 3.4. Cteva numere reprezentate n virgul flotant


Operaia invers, adic obinerea valorii zecimale dintr-o configuraie care
conine o reprezentare n virgul flotant se face urmnd calea invers compunerii
configuraiei.
Pentru a nu mai repeta scrierile, s considerm configuraia hexazecimal
pe patru octei (obinut, mai sus, la conversia n simpl precizie):

C55F48A3
16
Presupunem c n ea se afl un numr n virgul flotant, n simpl precizie.
Dup trecerea n baza 2, prin desfacerea celor trei zone s, c i m se obine
numrul:

(-1BE9146)16 211

(-1BE9146)16 16-6 211 =


(-1BE9146)16 2-13

(-29266246)10 / (8192)10 =
(-3572,5397949...)10
Se observ c numrul obinut este trunchiat cu 0,003... fa de numrul iniial.
Aceasta datorit numrului relativ mic de cifre semnificative al reprezentrii n
simpl precizie.

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