Sunteți pe pagina 1din 11

Lucrarea 3.

Reprezentarea numerelor n virgul flotant








1. Formate de virgul mobil

Numerele in virgul flotant sunt reprezentate n calculator folosind notaia tiinific
(care nu este poziional). n acest fel, se poate acoperi un domeniu valoric foarte mare.
Pentru a reprezenta un numr in virgul flotant folosim trei numere conform relaiei:
*
E
N M B = , (3.1)
Unde:
M reprezint mantisa. Mantisa M poate fi reprezentat in semn-mrime sau n
complement de 2.
B este baza. Baza de obicei e 2 sau o putere a lui 2 (ex. 4, 8, 16).
E denot exponentul. Acesta este reprezentat n semn marime sau cod exces.
Formatul de reprezentare n calculator este:
...be... ...bm...
S
E M
Figura 3.1


1.1 Problema mantisei

n continuare considerm un exemplu care s pun n eviden eventuale probleme legate
de reprezentarea mantisei:

n continuare se dorete reprezentarea numrului 18 n notaia tinific definit de relaia
(3.1). Astfel avem urmtoarele echivalene:
0 1 2
18*10 1.8*10 0.18*10 0.0 018*10
n
= = = =

Aadar, cele 3 numere ntregi M, B i E au o infinitate de valori posibile. Pentru o tratare
unitar i eficient prin prisma algoritmilor aplicai, este de dorit ca n sistemele de calcul
s avem de-a face cu o reprezentare unic. Din acest motiv s-a apelat la normalizarea
mantisei M. Astfel, folosindu-ne de reguli de normalizare obinem o singur reprezentare.
Deoarece avem 2 posibiliti de reprezentare a mantisei: semn-mrime respectiv
complement de 2, conditia de normalizare este dependent de tipul reprezentrii alese.
Regula pentru normalizare este:
Dac mantisa M este reprezentat n semn-mrime, atunci primul bit din dreapta
virgulei trebuie s fie 1. Operaia de normalizare se face prin eliminarea zero-urilor
nesemnificative (leading zeros).
Dac mantisa M este reprezentat n complement de 2 i are valoare negativ
atunci primul bit din dreapta virgulei trebuie s fie 0. Dac reprezentm un numr
pozitiv, atunci folosim regula anterior enunat pentru semn-mrime.

Operaia de normalizare presupune:
mutri succesive ale virgulei la dreapta, operaie urmat de incrementarea
exponentului;
mutri succesive ale virgulei la stanga, urmate de decrementarea corespunztoare
a exponentului.

S se normalizeze urmtoarele numere:
a) 0.00011101
SM
reprezentat n semn-mrime;
b)
2
1.11100011
C
reprezentat n complement de 2.

a) Pentru normalizare se mut virgule la stnga de 3 ori, decrementnd exponentul, pn
obinem n dreapta virgulei 1.
0.00011101
SM
1
*2 00.0011101
2
*2 000.011101

3
*2 0000.11101



b) Primul bit (bitul de semn) este 1, asadar numrul este negativ. Conform regulii de
normalizare, primul bit din dreapta virgulei trebuie s fie 0. Mutm virgula spre dreapta,
incrementnd corespunztor exponentul.
2
1.11100011
C
1
2
*2 11.1100011
C
2
2
*2 111.100011
C
3
2
*2 1111.00011
C


1.2 Problema exponentului

Problema exponentului se refer la reprezentarea lui 0 n virgul mobil. Conform
relaiei (3.1) 0=0*
E
B . Aparent aceasta duce la mai multe variante de reprezentare pentru
0, determinate de diferite valori ale exponentului. Pentru zero trebuie sa existe o modalitate
de reprezentare astfel ncat
s fie ct mai uor de detectat
i testat. Cea mai convenabil
reprezentare este cea a unui
ir de bii de 0.Asta
nseamn c valoarea
exponentului pentru numarul
zero este zero. Deoarece nu
putem reprezenta toat paleta
de numere reale (acestea sunt
o infinitate chiar), de multe
ori n calcule recurgem la
aproximri. Este posibil ca n
urma unor calcule n virgul
mobil, datorit acestor
aproximri successive, s
obinem nloc de 0 (mai exact
reprezentarea lui 0), un
numr foarte mic (asta se
traduce printr-o mantis
diferit de 0). Pentru a
minimiza eroarea, trebuie ca exponentul aferent lui 0 s fie cel mai mic posibil.
Din acest motiv, s-a hotrt ca valoarea minim a exponentului s fie 0. Aadar, toate
valorile negative reprezentabile pe N bii sunt deplasate (devin pozitive) prin adunarea
unui bias (unui surplus) care este egal cu valoarea absolut a celui mai mic numr
reprezentabil pe numrul de bii alocai pentru exponent.
Dac exponentul este reprezentat n semn-mrime pe N bii (de exemplu N=8) atunci
valoarea bias-ului este
1
2 1
N
(pentru N=8 bias-ul este 127). Dac bias-ul este
reprezentat n complement de 2 pe N bii (N=8) atunci valoarea bias-ului este
1
2
N
(pentru
N=8 avem bias=128).
Folosind formatul pentru numere in virgula flotant descris n figura 3.1, se pot
concepe o multitudine de reprezentri pentru acestea. Folosind diferite reprezentri pentru
numere de virgula flotant este imposibil de asigurat portabilitatea programelor. Din acest
Valoare cu semn
(real-cea a numrului
reprezentat)

Reprezentare
binar

Valoare
fr semn
Bias = 127 Bias = 128
11111111 255 +128 +127
11111110 254 +127 +126
.
.
.
.
.
.
.
.
.
.
.
.
10000001 129 +2 +1
10000000 128 +1 0
01111111 127 0 -1
01111110 126 -1 -2
.
.
.
.
.
.
.
.
.
.
.
.
00000001 1 -126 -127
00000000 0 -127 -128
Tabelul 3.1
motiv, a fost necesar standardizarea reprezentrii numerelor n virgul flotant. Cele mai
reprezentative standarde pentru virgula mobil sunt: IEEE 754 i IBM S360/370.

2. Standardul IEEE 754

Standardul IEEE a fost rapid acceptat de ctre productorii de componente hardware,
motiv pentru care este unul dintre cele mai raspndite, dac nu unicul, n sistemele de
calcul din zilele noastre. Acesta prezint 3 formate de reprezentare pentru numerele n
virgul mobil:
-reprezentarea n simpl precizie;
-reprezentarea n dubl precizie;
-reprezentarea n precizie dubl-extins.

IEEE 754 are urmtoarele caracteristici:

Partea de exponent i partea de mantis sunt reprezentate n formatul semn -
mrime.
Exponentul este reprezentat n exces de:
o 127 pentru simpl precizie
o 1023 pentru dubl precizie.

Hidden bit. Mantisa are un bit de 1 ascuns. Deoarece mantisa este reprezentat n
semn-mrime; din acest motiv, bitul la dreapta virgulei trebuie s fie 1 (din
condiia de normalizare). Deci, rezult urmatoarea reprezentare (S.1M) (unde S
este semnul iar M este mantisa). n continuare virgula a fost mutat la dreapta bit-
ului de 1 cel mai semnificativ. Astfel rezult reprezentarea S1.M. Din cauz c
bitul care urmeaz celui de semn S este ntotdeauna 1, pentru a se ctiga precizie,
el nu se include n reprezentare, ci se consider implicit - fiind astfel un bit ascuns
(hidden bit).

Reprezentarea in simpl precizie
Revendic 32 de bii care sunt organizai astfel:
1 bit de semn
8 bii de exponent; exponent reprezentat n exces de 127
23 bii de mantis (significand)
Formatul de numr este:

Figura 3.2: Format de numr IEEE 754 simpl precizie

S se reprezinte n format IEEE 754 de simpl precizie numrul 8.625.
Pasul 1: Se convertete numrul n baza 2.
Partea ntreag: 8=100
Partea zecimal:
0.625*2=1.25 1
0.25*2=0.5 0
0.5*2=1.0 1
10 2
0.625 0.101 =
Aadar numrul este:
2
100.101
8.625=100.101*
0
2
Pasul 2: Se normalizeaz numrul astfel nct mantisa s fie de forma: 1.M. Asta
presupune mutarea virgulei cu ajustarea corespunztoare a puterii lui 2 (vezi exemplul 2).
100.101=1.00101*
2
2
Exponentul obinut este 2. La acesta trebuie s adunm excesul pentru a obine valoarea n
exces de 127. Deci
( )
7 0
2 127 129 128 1 2 2 10000001 E exces + = + = = + = =
Deci,




Pasul 3: Scrierea numrului n format IEEE 754 simpl precizie.
Respectnd formatul din figura 3.2 se obine reprezentarea numrului n IEEE 754:

S E (8 bii) M (23 bii)
0 10000001 0010 1000 0000 0000 0000 000
Aa cum se poate observa n acest exemplu, la biii de mantis utili (5 la numr) au fost
adugai restul de bii pn la 23 (cei notai cu rou).

Pentru conversia unui numar din IEEE 754 simpl precizie n zecimal avem urmtoarea
formul:
127
( 1) *2 *1.
s E
N M

= , unde 0<E<255. (3.2)



S se determine valoarea zecimal pentru urmtorul ir binar care corespunde unui numr
reprezentat n format IEEE 754 de simpl precizie:
M= 00101
E= 10000001
S= 0 - numrul este pozitiv
N=0100 0000 1110 0000 0000 0000 0000 0000.
Folosind formatul din figura 3.2.

S E (8 bii) M (23 bii)
0 10000001 11000000000000000000000

Folosim relaia (3.2).
0 129 127 2
( 1) *2 *1.11000000000000000000000=2 *1.75 7 N

= =

Reprezentarea in dubl precizie
Revendic 64 de bii care sunt organizai astfel:
1 bit de semn
11 bii de exponent reprezentai n exces de 1023
52 bii de mantis (significand)

Astfel, numere in virgul mobil sunt de forma:

Figura 3.3: Formatul numerelor reprezentate n IEEE 754 dubl precizie

De asemenea analog cu simpl precizie i la dubl precizie pentru conversia unui numr
din IEEE 754 dubl precizie n zecimal avem urmatoarea formul:
1023
( 1) *2 *1.
s E
N M

= , unde 0<E<2047. (3.3)



Valori/Reprezentri speciale

Exist 4 astfel de valori speciale: 0 , numere denormalizate, , NaNs ilustrate n
urmtorul tabel:

Nr. Exponent
(E)
Mantisa (M) Valoare speciala
1. 0 0 0
2. 0 0 Denormalized
numbers
3. 255 0
4. 255 0 NaN
Table 3.2: Special values.



Denormalized numbers (Numere denormalizate)
Dac n sistemele de calcul, n urma operaiilor n virgul mobil obinem un rezultat care
este mai mic dect valoarea minim reprezentabil, atunci spunem c obinem un numr de
normalizat. Aceasta coincide cu a avea o valoare minim reprezentabil n campul de
exponent, adic 0, iar partea de mantis 0 i care pentru a fi normalizat revendic
ajustarea prin scdere a exponentului (deplasri la stnga). Procesul prin care mantisa este
micorat prin deplasri spre dreapta pn cnd devine 0, iar exponentul este 0 se numete
gradual underflow.

Infinit
Aceast reprezentare ofer o modalitate de continuare a calculelor n situaia n care
rezultatul intermediar este infinit sau avem overflow. Overflow-ul (depirea) reprezint
situaia n care rezultatul obinut este un numr mai mare decat cel maxim reprezentabil pe
numrul alocat de bii. n cazul situaiei de infinity, dac pe parcusul calculelor avem
operaia (constanta/ ) atunci rezultatul acestei operaii n virgul mobil va fi 0. Pe de
alt parte n situaia n care n urma efecturii calculului avem , se va efectua un salt la o
adres prestabilit n memorie de tratare a acestei excepii.

Not a number (NaN)
Datorit unei erori, la un moment dat poate avea loc una din operaiile: 0/0 sau Nr . n
astfel de situaii, rezultatul are cmpul de mantis 0 , iar cel de exponent egal cu 255. n
funcie de implementrile existente n sistemele de calcul, aceste NaNs pot avea diferite
valori ale mantisei. Calculele dup apariia unui NaN au loc n continuare n sistemul de
calcul. n general o operaie n virgul mobil cu un NaN are ca i rezultat tot un NaN.
Deci, dac o subexpresie este evaluat la NaN, atunci ntreaga expresie va fi evaluat la
NaN. La sfritul secvenei de calcul, se verific mantisa i exponentul i dac se observ
E=255 i M 0 , atunci se tie c avem de-a face cu un NaN i se face un salt la o rutin
prestabilit din memorie: trap handler unde se execut o secven de instruciuni specifice
acestei excepii.

3. Standardul IBM S360/370

Standardul IBM prezint trei formate:
simpl precizie (32 bii)
dubl precizie (64 bii)
precizie extins (128 bii).

IBM S360/370 are urmtoarele caracteristici:
Mantisa este reprezentat in semn-mrime.
Baza n cazul standardului IBM nu este 2, ci baza 16. Principalul avantaj al bazei
16 fa de baza 2 este faptul ca domeniul valoric crete foarte mult. De asemenea,
folosind baza 16, incrementarea/decrementarea exponentului atrage dupa sine
mutarea virgulei la stnga sau la dreapta, nu cu o poziie ca la baza 2, ci cu patru
poziii. Un alt aspect al folosirii bazei 16 ine de normalizare, numrul se
consider normalizat atunci cnd prima cifr hexazecimal (adic primul grup de
patru bii) din dreapta virgulei este diferit de zero, spre deosebire de baza 2, unde
primul bit din dreapta virgulei este 1. !!!
Spre deosebire de IEEE 754 standardul IBM nu prevede:
o valori speciale si excepii, cum sunt cele definite de standardul IEEE
754 (NaN, overflow, numere denormalizate). Zero este reprezentat ca
un sir continuu de zerouri.
o Nu exista hidden bit.
o Baza este 16, i nu 2.

Formatul de simpl precizie are urmtoarele cmpuri:
Semn (S) 1 bit
Exponent (Exp) 7 bii (in exces de 64)
Mantisa (M) 24 bii

Figura 3.5
Formatul de dubla precizie are urmtoarele cmpuri:
Semn (S) 1 bit
Exponent (Exp) 7 bii (in exces de 64)
Mantisa (M) 56 bii

Figura 3.6

Formatul de precizie extins are urmtoarele cmpuri:
Semn (S) 1 bit
Exponent (Exp) 7 bii (in exces de 64)
Mantisa (M) 116 bii
Portiunea incepnd cu bitul 64 si terminnd cu bitul 71 este rezervat
!!!!

Figura 3.7

Valoarea unui numar reprezentat in standard IBM S360/370 este:

64
( 1) *16 *0.
s Exp
N M

= (3.4)


S se reprezinte n format IBM S360/370 de simpl precizie numrul 8.625.
Pasul 1: Se convertete numrul n baza 2.
Partea ntreag: 8=100
Partea zecimal:
0.625*2=1.25 1
0.25*2=0.5 0
0.5*2=1.0 1
10 2
0.625 0.101 =
Aadar numrul este:
2
100.101
8.625=0100.101*16
0
Pasul 2: Se normalizeaz numrul astfel nct mantisa s fie de forma 0.M, unde grupul
format din cei semnificativi patru bii ai lui M s fie diferite de 0. Asta presupune mutarea
virgulei cu ajustarea corespunztoare a puterii lui 16. Normalizarea se face mutnd cte
patru bii la dreapta.
100.101=0.0100 101*16
1

Exponentul obinut este 1. La acesta trebuie s adunm excesul pentru a obine valoarea n
exces de 64. Deci
( )
1 64 65 1000001 E exces = + = =
Deci,



M= 0100 101
E= 100 0001
S= 0 - numrul este pozitiv

Pasul 3: Scrierea numrului n format IEEE 754 simpl precizie.
Respectnd formatul din figura 3.2 se obine reprezentarea numrului n IEEE 754:

S E (7 bii) M (24 bii)
0 1000001 0100 1010 0000 0000 0000 0000
Aa cum se poate observa n acest exemplu, la biii de mantis utili (7 la numr) au fost
adugai restul de bii pn la 24 (cei notai cu rou).


S se determine valoarea zecimal pentru urmtorul ir binar care corespunde unui numr
reprezentat n format IEEE 754 de simpl precizie:
N=0100 0000 1110 0000 0000 0000 0000 0000.
Folosind formatul din figura 3.2.

S E (7 bii) M (24 bii)
0 100 0000 1110 0000 0000 0000 0000 0000

Folosim relaia (3.4).
0 64 64
( 1) *16 *0.111000000000000000000000=1*0.875 0.875 N

= =

4. Exerciii rezolvate

S se determine domeniul valoric pentru formatul IEEE simpl precizie.

Rezolvare:
Domeniul valoric este dat de numrul maxim i numrul minim care se pot reprezenta cele
dou formate. Grafic vorbind, domeniul de valori este prezentat n figura de mai jos:

Unde X1 este cel mai mic numr negativ reprezentabil, X2 este cel mai mare numr
negativ reprezentabil, X3 cel mai mic numr pozitiv reprezentabil, iar X4 cel mai mare
numr pozitiv reprezentabil. Domeniul de valori este dat de mulimea
[ ] [ ] 1, 2 3, 4 X X X X
.
Astfel pentru formatul IEEE 754 simpl precizie avem: exponentul maxim este 254 )n
exces de 127), exponentul minim este 1 (n exces de 127), valoarea maxim a mantisei
este 1.111 1111 1111 1111 1111 1111, iar valoarea minim a mantisei este 1.000 0000
0000 0000 0000 0000.
254 127 38
1 127 38
0 1 127 38
0 254 127 38
1 ( 1) *2 *1.111...11 3, 402*10
2 ( 1) *2 *1.000..00 1,176*10
3 ( 1) *2 *1.000..00 1,176*10
4 ( 1) *2 *1.111...11 3, 402*10
X
X
X
X




= =
= =
= =
= =


5. Exerciii propuse
1. S se fac conversia urmtoarelor numere n formatele IEEE 754 simpl precizie i
IBM S360/370: 2.5, 0.375, -12.625, -0.50625.
2. S se calculeze valoarea urmtoarelor iruri binare:
a. Reprezentate n formatul IEEE 754 simpl precizie
b. Reprezentate n formatul IBM S360/370 simpl precizie
0011 0110 0000 1010 0000 0000
1011 1011 1100 0000 0000 0000
3. S se calculeze domeniul valoric al formatului IBM S360/370 simpl precizie

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