REPREZENTAREA IN VIRGULA MOBILA (VM)
In general, un numar N se poate reprezenta in virgula mobila (VM) in forma urmatoare:
Un numar reprezentat in VM are doua componente. Prima componenta este mantisa (M), care indica valoarea exacta a numarului intr-un anumit domeniu, fiind reprezentata de obicei ca un numar fractionar cu semn. A doua componenta este exponentul (E), care indica ordinul de marime al numarului. In expresia de sus, B este baza exponentului.
Aceasta reprezentare poate fi memorata intr-un cuvant binar cu trei campuri: semnul, mantisa si exponentul. De exemplu, presupunand un cuvant de 32 de biti, o asignare posibila a bitilor la fiecare camp poate fi urmatoarea:
23 |
0 |
|
S |
Exponent |
Mantisa |
Aceasta este o reprezentare in marime si semn, deoarece semnul are un camp separat fata de restul numarului. Campul de semn consta dintr-un bit care indica semnul numarului, 0 pentru un numar pozitiv si 1 pentru un numar negativ. Nu exista un camp rezervat pentru baza B, deoarece aceasta baza este implicita si ea nu trebuie memorata, fiind aceeasi pentru toate numerele.
De obicei, campul rezervat exponentului nu contine exponentul real, ci o valoare numita caracteristica, care se obtine prin adunarea unui deplasament la exponent, astfel incat sa rezulte intotdeauna o valoare pozitiva. Astfel, nu este necesar sa se rezerve un camp separat pentru semnul exponentului. Caracteristica C este deci exponentul deplasat:
(1.2.)
Valoarea reala a exponentului se poate afla prin scaderea deplasamentului din caracteristica numarului. De exemplu, daca pentru caracteristica se rezerva un camp de 8 biti, valorile caracteristicii pot fi cuprinse intre 0 si 255. Considerand un deplasament de 128 , exponentul real poate lua valori intre si , fiind negativ daca , pozitiv daca , si zero daca . Exponentul este deci reprezenta in exces 128.
Unul din avantajele utilizarii exponentului deplasat consta in simplificarea operatiilor executate cu exponentul, datorita lipsei exponentilor negativi. Al doilea avantaj se refera la modul de reprezentare al numarului zero. Mantisa numarului zero are cifre de 0 in toate pozitiile. Exponentul numarului zero poate avea, teoretic, orice valoare, rezultatul fiind tot zero. La unele calculatoare, daca un rezultat are mantisa zero, exponentul ramane la valoarea pe care o are in momentul respectiv, rezultand un "zero impur
La majoritatea calculatoarelor, se recomanda ca numarul zero sa aiba cel mai mic exponent posibil, rezultand astfel un "zero pur". In cazul exponentilor deplasati, exponentul cu cea mai mica valoare este 0. Deci, prin utilizarea caracteristicii, reprezentarea in VM a numarului 0 este aceeasi cu reprezentarea in VF, adica toate pozitiile sunt 0. Aceasta inseamna ca se pot utiliza aceleasi circuite pentru testarea valorii zero.
Un alt avantaj al utilizarii exponentilor deplasati este ca numerele pozitive in virgula mobila sunt ordonate in acelasi fel ca si numerele intregi. Deci, marimea numerelor in virgula mobila poate fi comparata utilizand un comparator pentru numere intregi.
Un dezavantaj al utilizarii exponentilor deplasati este ca adunarea lor este mai complicata, deoarece necesita scaderea deplasamentului din suma exponentilor.
In reprezentarea de mai sus, mantisa consta din 23 de biti. Desi virgula binara nu este reprezentata, se presupune ca ea este asezata inaintea bitului c.m.s. al mantisei.
De exemplu: daca , numarul poate fi reprezentat sub mai multe forme:
|
|
|
|
Pentru simplificarea operatiilor cu numere in VM si pentru cresterea preciziei acestora, se utilizeaza reprezentarea sub forma normalizata. Un numar in VM este normalizat daca bitul c.m.s. al mantisei este 1. Din cele doua reprezentari ale numarului , ilustrat mai sus, prima este cea normalizata.
Deoarece bitul c.m.s. al unui numar normalizat in VM este intotdeauna 1, acest bit nu este de obicei memorat, fiind un bit ascuns la dreapta virgulei binare. Aceasta permite ca mantisa sa aiba un bit semnificativ in plus. Astfel, campul de 23 de biti este utilizat pentru memorarea unei mantise de 24 de biti cu valori cuprinse intre si .
In unele cazuri, bitul ascuns se presupune pozitionat la stanga virgulei binare. Astfel, mantisa memorata M va reprezenta de fapt valoarea . In acest caz, numarul normalizat va avea urmatoarea forma:
|
|
Presupunand ca bitul ascuns este pozitionat la stanga virgulei binare in formatul prezentat, un numar normalizat diferit de zero reprezinta urmatoarea valoare:
(1.3.)
unde S indica bitul de semn.
In acest format se pot reprezenta numere in urmatoarele domenii:
numere negative intre: si ;
numere pozitive intre: si .
Problema care apare in cazul formatului prezentat este ca nu exista o reprezentare pentru valoarea 0. Aceasta deoarece valoarea 0 nu poate fi normalizata. Totusi, reprezentarile in VM rezerva de obicei o combinatie speciala de biti pentru reprezentarea valorii 0. De multe ori, aceasta valoare se reprezinta prin cifre de 0 in cadrul mantisei si a exponentului. Un asemenea exemplu de reprezentare este formatul standard definit de organizatia IEEE (standardul IEEE 754).
Depasirea superioara apare atunci cand exponentul depaseste valoarea maxima, de exemplu peste 127 in cazul formatului prezentat. Depasirea inferioara apare atunci cand exponentul are o valoare negativa prea mica, de exemplu sub . In cazul depasirii inferioare, rezultatul se poate aproxima cu 0. Coprocesoarele matematice si unitatile de calcul in virgula mobila au anumite mecanisme pentru detectarea, semnalizarea si tratarea depasirii superioare si a celei inferioare.
Pentru alegerea unui format in VM trebuie realizat un compromis intre dimensiunea mantisei si cea a exponentului. Cresterea dimensiunii mantisei va conduce la cresterea preciziei numerelor, iar cresterea dimensiunii exponentului va conduce la cresterea domeniului numerelor care pot fi reprezentate. Singura cale de a creste atat precizia, cat si domeniul numerelor, este de a utiliza un numar mai mare de biti pentru reprezentare. Cele mai multe calculatoare utilizeaza cel putin doua formate, in simpla precizie (de exemplu, pe 32 de biti), si dubla precizie (de exemplu, pe 64 de biti).
Reprezentarea numerelor in formatul IEEE 754
In trecut, au existat diferente considerabile in modul de executie a operatiilor in VM la diferite familii de calculatoare. Aceste diferente se refereau la numarul de biti alocati pentru exponent si pentru mantisa, la gama exponentilor, la modurile de rotunjire si la operatiile executate la aparitia unor conditii de exceptie, ca depasirea superioara sau cea inferioara.
Astfel, IEEE (Institute of Electrical and Electronics Engineers) a elaborat un standard pentru reprezentarea numerelor in virgula mobila (VM) si pentru operatiile aritmetice in aceasta reprezentare. Standardul IEEE 754 a fost publicat in anul 1985.
Standardul IEEE 754 defineste urmatoarele formate sau precizii:
Formatul scurt (precizie simpla): 4 octeti;
Formatul lung (precizie dubla): 8 octeti;
Formatul temporar (precizie extinsa): 10 octeti.
Parametrii principali ai acestor formate sunt prezentate in Tabelul 1. Standardul nu precizeaza ca obligatorie implementarea tuturor formatelor, dar recomanda implementarea combinatiei cu precizie simpla si precizie simpla extinsa, sau a formatelor cu precizie simpla, precizie dubla si precizie dubla extinsa.
Tabelul 1 - Parametrii formatelor definite de standardul IEEE 754
Precizie simpla |
Precizie simpla extinsa |
Precizie dubla |
Precizie dubla extinsa |
|
Biti ai mantisei |
|
|
|
|
Exponent real maxim |
|
|
|
|
Exponent real minim |
|
|
|
|
Deplasament exponent |
|
Nespecificat |
|
Nespecificat |
Pentru toate formatele, baza implicita este 2. Formatele cu precizie simpla, precizie dubla si precizie dubla extinsa sunt prezentate in figura 1. Coprocesoarele matematice si unitatile de calcul in virgula mobila ale procesoarelor implementeaza de obicei aceste formate.
Figura 1 - Formatele cu precizie simpla, precizie dubla si precizie dubla extinsa definite de standardul IEEE 754
S reprezinta semnul numarului. Pentru exponentul deplasat se rezerva 8 biti in formatul scurt, 11 biti in formatul lung si 15 biti in formatul temporar. Deplasamentul exponentului pentru cele trei formate este de 127 , 1023 , respectiv 16.383 . Valorile minime (0) si cele maxime (255, 2047, respectiv 32.767) ale exponentului nu sunt utilizate pentru numerele normalizate, ele fiind utilizate pentru reprezentarea unor valori speciale.
Bitul ascuns este utilizat si la standardul IEEE 754, dar mantisa este reprezentata intr-un mod diferit. Reprezentarea mantisei este denumita significand in standardul IEEE. In cazul formatelor cu precizie simpla si precizie dubla, mantisa consta dintr-un bit implicit cu valoarea 1 (partea intreaga), virgula binara implicita si bitii fractiei F:
(1.4.)
Daca toti bitii fractiei sunt 0, mantisa este ; daca toti bitii fractiei sunt 1, mantisa este cu putin mai mica decat . Deci:
(1.5.)
Formatul cu precizie dubla extinsa este utilizat pentru reprezentarea numerelor in cadrul unitatilor de calcul in VM si a coprocesoarelor matematice, in scopul reducerii erorilor datorate rotunjirilor. In acest format, bitul 63 reprezinta partea intreaga a mantisei, care nu este implicita. Numerele in formatul temporar nu sunt intotdeauna normalizate, de aceea nu incep in mod obligatoriu cu un bit de 1. Din acest motiv, acest bit este reprezentat in mod explicit, fiind notat cu I in cadrul formatului. Valoarea mantisei este in acest caz:
(1.6.)
Valoarea unui numar in precizie simpla , in precizie dubla si in precizie dubla extinsa este:
(1.7.)
(1.8.)
(1.9.)
Una din problemele care apar la calculele cu numere in VM se refera la modul de tratare al depatirilor inferioare si superioare. O alta problema este reprezentarea valorilor nedefinite. In acest scop, pe langa numerele normalizate, standardul mai permite si reprezentari ale unor valori speciale, pentru care sunt rezervate valoarea 0 si valoarea maxima a exponentului. Valorile speciale pentru formatele cu precizie simpla si precizie dubla sunt prezentate in tabelul 2. In acest tabel se indica si valorile numerelor normalizate in cele doua formate.
Tabelul 2 - Valori ale numerelor reprezentate
conform standardului IEEE 754
Precizie simpla (32 biti) |
||
Exponent |
Significand |
Valoare |
|
||
|
|
|
|
orice valoare |
|
|
||
|
NaN |
|
Precizie dubla (64 biti) |
||
Exponent |
Significand |
Valoare |
|
||
|
|
|
|
orice valoare |
|
|
||
|
NaN |
Pentru valoarea zero, atat exponentul, cat si mantisa, sunt egale cu 0. Exista doua reprezentari pentru valoarea 0, in functie de bitul de semn: , respectiv . Bitul ascuns de la stanga virgulei binare este implicit 0 in loc de 1.
In cazul obtinerii unui rezultat cu o valoare mai mica decat numarul normalizat cel mai mic posibil, in mod obisnuit rezultatul este setat la zero si calculele continua, sau se semnalizeaza o conditie de depasire inferioara. Nici una din aceste solutii nu este satisfacatoare. De aceea, standardul permite utilizarea numerelor care nu sunt normalizate, acestea fiind numite numere denormalizate. Caracteristica acestor numere este 0, iar mantisa este diferita de 0. In acest caz, bitul ascuns este 0.
Un numar denormalizat este generat printr-o tehnica numita depasire inferioara graduala.
Pentru cazul in care apare o depasire superioara, exista o reprezentare speciala pentru infinit, constand din exponentul cu valoare maxima pentru formatul respectiv, si mantisa egala cu 0. In functie de bitul de semn, sunt posibile doua reprezentari pentru infinit, si . Valoarea infinit se poate utiliza ca operand, utilizand reguli ca:
(1.10.)
(1.11.)
(1.12.)
Astfel, utilizatorul poate decide daca va trata depasirea superioara ca o conditie de eroare, sau va continua calculele cu valoarea infinit.
Pentru indicarea diferitelor conditii de exceptie, ca in cazul operatiilor nedefinite de forma , , , , , sau extragerea radacinii patrate dintr-un numar negativ, s-a prevazut un format special, care nu reprezinta un numar obisnuit, fiind numit NaN (Not a Number). Exponentul are valoarea maxima posibila, iar mantisa este diferita de 0.
Standardul IEEE specifica faptul ca atunci cand argumentul unei operatii este NaN, rezultatul trebuie sa fie NaN. Datorita regulilor de executie a operatiilor aritmetice cu valori NaN, la scrierea subrutinelor de calcul in VM care accepta o valoare NaN ca argument nu sunt necesare verificari speciale. De exemplu, presupunand ca functia arccos se calculeaza pe baza functiei arctg, utilizand formula:
(1.13.)
Daca functia arctg trateaza un argument NaN in mod corect, si functia arccos va trata un asemenea argument in mod corect. Daca este o valoare NaN, , , si vor fi de asemenea valori NaN. Astfel, nu este necesara testarea valorilor NaN.
O alta caracteristica a standardului IEEE cu implicatii asupra circuitelor este regula de rotunjire. In urma operatiilor efectuate intre doua numere in VM, de obicei rezultatul nu poate fi reprezentat in mod exact ca un alt numar in VM. Standardul specifica patru moduri de rotunjire: rotunjire spre 0, rotunjire spre , rotunjire spre , si rotunjire la cel mai apropiat numar reprezentabil. Ultimul mod de rotunjire este cel implicit, si este prevazut pentru situatiile in care numarul se afla exact la jumatatea intervalului dintre doua reprezentari in VM. Acest mod efectueaza rotunjirea la un numar par.
Standardul IEEE defineste cinci tipuri de exceptii: depasire inferioara, depasire superioara, impartire la zero, rezultat inexact si operatie invalida. In mod implicit, la aparitia unei asemenea exceptii, este setat un indicator si calculele continua. Standardul recomanda ca implementarile sa prevada un bit de validare pentru fiecare exceptie: Daca apare o exceptie cu bitul de validare setat, este apelata o rutina de tratare a exceptiei.
Exceptiile de depasire inferioara, depasire superioara si impartire la zero sunt prevazute la majoritatea sistemelor de calcul in VM. Exceptia de rezultat inexact apare atunci cand rezultatul unei operatii trebuie rotunjit. Aceast nu este o conditie exceptionala, deoarece apare in mod frecvent. Deci, validarea rutinei de tratare a acestei exceptii poate avea un impact semnificativ asupra performantei. Exceptie de operatie invalida apare in cazul unor operatii ca: , sau .
Avantajul principal al standardului IEEE este ca ajuta la scrierea unor biblioteci de programe portabile. Acest standard are insa si unele dezavantaje:
Standardul a fost destinat initial microprocesoarelor, astfel incat cerintelor pentru implementarile cu performante ridicate nu li s+a acordat o prioritate ridicata;
Standardul contine specificatii optionale. Pentru cei care implementeaza standardul, este dificil sa decida care din aceste specificatii vor fi implementate. Pentru programatorii care doresc scrierea unor programe portabile, problema este daca trebuie sa evite utilizarea specificatiilor optionale ale standardului;
Depasirea inferioara graduala a fost implementata de obicei intr-un mod care este cu mai multe ordine de marime mai lent decat setarea rezultatului la zero, astfel incat de multe ori utilizatorii invalideaza aceasta tehnica;
Standardul nu descrie operatiile aritmetice cu numere intregi si nici functiile transcendentare (sin, cos, exp). In particular, standardul nu specifica acuratetea necesara pentru functiile transcendentare, sau valorile exceptionale ale functiilor transcendentare, ca de exemplu .
Standardul IBM S/360, S/370
Standardul prezinta trei formate: precizie simpla (32 de biti), precizie dubla (64 de biti) si precizie extinsa (80 de biti).
(1.14.)
In campul exponentului se reprezinta numere intregi in exces de 64 si pentru toate versiunile este format din 7 biti. Mantisa este un numar fractionar reprezentat in semn-marime nefolosindu-se solutia bit ascuns ("hidden" bit - ). Baza nu mai este 2 ci 16 iar normalizarea se face in consecinta, fiecare incrementare sau decrementare a exponentului mutand virgula la stanga sau la dreapta cu 4 pozitii binare.
In acest standard nu avem posibilitatea de a reprezenta situatii speciale de tip NaN (Not a Number), nici de depasire, nici de denormalizare, iar zero este reprezentat cu zero peste tot. Datorita bazei 16 campul valoric de reprezentare a numerelor este mult mai mare: .
Exemplul
Care este reprezentarea binara a numarului in simpla precizie?
Rezolvare
Numarul poate fi scris in binar: .
MSB
0,50 LSB
Notatia stiintifica a numarului este: , iar forma normalizata a acestei notatii este: . Caracteristica va fi: .
Reprezentarea numarului in simpla precizie este deci:
23 |
0 |
|
|
|
Exemplul
Care este numarul zecimal reprezentat de urmatorul cuvant?
23 |
0 |
|
|
|
Rezolvare
Bitul de semn este 1, campul rezervat caracteristicii contine: .
iar campul mantisei contine: , avand notatia stiintifica: , iar forma normalizata: .
Valoarea numarului este:
.
Exemplul 3
Urmatorul cuvant pe 32 de biti este interpretat ca reprezentand, conform standardului IEEE 754, un numar in virgula mobila:
Sa se afle valoarea numarului astfel reprezentat.
Rezolvare
Putem afla valoarea numarului astfel reprezentat parcurgand urmatoarele etape:
23 |
0 |
|
S |
Exponent |
Mantisa |
Separam cele trei campuri:
Identificam semnul ca fiind plus.
Scadem din cel de-al doilea camp
valoarea pentru a afla valoarea exponentului.
Rezulta:
Adaugam 1 in fata celui de al treilea cimp si obtinem mantisa:
Obtinem numarul reprezentat mutand virgula cu 13 pozitii la dreapta in numarul :
Deci exponentul ia valori in intervalul , iar precizia cu care poate fi reprezentat un numar este de 24 de biti.
Exemplul
Se da numarul .
Se cere reprezentarea sa in standardul IEEE 754.
Rezolvare
Pentru a reprezenta numarul in standardul IEEE 754 este necesar mai intai conversia acestuia in binar:
LSB
957 : 2 = 478 + 1
478 : 2 = 239 + 0
239 : 2 = 119 + 1
119 : 2 = 59 + 1
59 : 2 = 29 + 1
29 : 2 = 14 + 1
14 : 2 = 7 + 0
3 : 2 = 1 + 1
1 : 2 = 0 + 1 MSB
0,40625 MSB
0,81250
0,6250
0,250
0,5 LSB
Tinand cont de forma unui numar in IEEE 754 (normalizata):
rezulta:
137 : 2 = 68 + 1 LSB
68 : 2 = 34 + 0
34 : 2 = 17 + 0
17 : 2 = 8 + 1
8 : 2 = 4 + 0
4 : 2 = 2 + 0
2 : 2 = 1 + 0
1 : 2 = 0 + 1 MSB
Reprezentarea conform IEEE 754 rezulta:
S |
Exponent |
Mantisa |
Cei 32 de biti ai reprezentarii pot fi considerati intr-o forma compacta ca si un cod hex pe 8 simboluri:
Exemplul
Se da numarul .
Se cere reprezentarea sa in standardul IBM S
Rezolvare
Standardul IBM S codifica un numar sub formatul general:
Deoarece baza reprezentarii este , mutarea virgulei pentru a obtine pentru N formatul IBM se va face in grupuri de cate 4 cifre binare.
67 : 2 = 33 + 1 LSB
33 : 2 = 16 + 1
16 : 2 = 8 + 0
8 : 2 = 4 + 0
4 : 2 = 2 + 0
2 : 2 = 1 + 0
1 : 2 = 0 + 1 MSB
Reprezentarea conform IBM S rezulta:
B | |||||||
|
Codul hex care rezulta pentru reprezentare este: .
Exemplul 6
Se considera codul de 32 de biti sub forma compacta 43B4D680, reprezentand un numar in standard IEEE 754. Care este valoarea numarului in zecimal
Rezolvare
Desfasurarea codului pe 32 de biti ofera informatii asupra semnului, mantisei si exponentului numarului, tinand cont de formula generala:
Codul desfasurat este:
B |
D | ||||||
|
T numarul este pozitiv;
In zecimal, numarul este:
Exemplul
Se considera codul de 32 de biti sub forma compacta 43B4D680, reprezentand un numar in standard IBM S . Care este valoarea numarului in zecimal
Rezolvare
Desfasurarea codului pe 32 de biti ofera informatii asupra semnului, mantisei si exponentului numarului, tinand cont de formula generala:
Codul desfasurat este:
B |
D | ||||||
|
T numarul este pozitiv;
In zecimal, numarul este:
Politica de confidentialitate |
.com | Copyright ©
2024 - Toate drepturile rezervate. Toate documentele au caracter informativ cu scop educational. |
Personaje din literatura |
Baltagul – caracterizarea personajelor |
Caracterizare Alexandru Lapusneanul |
Caracterizarea lui Gavilescu |
Caracterizarea personajelor negative din basmul |
Tehnica si mecanica |
Cuplaje - definitii. notatii. exemple. repere istorice. |
Actionare macara |
Reprezentarea si cotarea filetelor |
Geografie |
Turismul pe terra |
Vulcanii Și mediul |
Padurile pe terra si industrializarea lemnului |
Termeni si conditii |
Contact |
Creeaza si tu |