Creeaza.com - informatii profesionale despre


Simplitatea lucrurilor complicate - Referate profesionale unice
Acasa » referate » informatica
Reprezentarea numerelor in virgula flotanta

Reprezentarea numerelor in virgula flotanta


Reprezentarea numerelor in virgula flotanta

Domeniul valoric acoperit de numerele reprezentate in virgula fixa este, in general, insuficient pentru unele aplicatii, cu precadere unele care apeleaza calcule stiintifice, in care se intalnesc, in mod frecvent, valori foarte mici si foarte mari. Penru descrierea acestora nu se mai apeleaza la notatia pozitionala, fiind necesara una diferita cunoscuta drept notatie stiintifica. Dezideratul esential la care raspunde aceasta din urma notatie, este de acoperire a unei game valorice foarte mari de numere reale, la care pozitia virgulei sa poata glisa, reclamand, pentru reprezentarea acestora, un numar relativ restrans de biti. Conform notatiei stiintifice, un numar de virgla flotanta X se prezinta in forma: , unde XM reprezinta asa numit mantisa (mantisa), B reprezinta asa numita baza (base), iar reprezinta asa numitul exponent (exponent).

Dintre cele trei numere care intervin in descrierea lui X, baza B este, in mod invariabil, egala cu 2 sau, mai rar, o putere a lui 2. Intrucat este constanta, ea nu este necesar sa fie inclusa in formatul numerelor de virgula flotanta, fiind considerata implicit cu implementarea cablata in scheme (built into the circuits).



Raman a fi incluse in formatul de virgula flotanta doua numere, exponentul XE si mantisa XM, ambele fiind codificate in virgula fixa si reprezentare binara. In mod uzual, XE este un numar intreg, iar XM este un numar fractionar, reprezentat in formatele SM sau C2.

Referidu-ne la domeniul valoric acoperit de numerele X, acesta este terminat de valorile lui B si XE . Fiind dat un format de virgula flotanta de n biti, acesta permite, ignorand semnul, reprezentarea a 2n numere, care prezinta o anumita distributie in campul valoric tolerat. Marind pe B sau XE , se poate creste, in mod semnificativ, domeniul valoric, dar, aceasta implica, intervalele mai mari intre numere (o distributie mai rara), numarul total al potentialelor reprezentari ramanand acelasi.

Pe de alta parte, precizia reprezentarii de virgula flotanta este determinata de numarul de biti alocati reprezentarii mantisei, fiind cu atat mai mare cu cat XM se prezinta pe mai multi biti, dar aceasta implica reducerea numarului de biti alocati numarului XE .

Pe baza celor prezentate, se poate configura cuvantul corespunzator unui format general de virgula flotanta. Dupa cum este prezentat in fig.1.7, aceasta cuprinde campurile S, de un bit, in care este specificat - in conventia descrisa de virgula fixa - semnul mantisei, de e biti, in care se prezinta, in virgula fixa, numarul exponent, si XM*, de m biti, in care se prezinta, in virgula fixa, numarul XM*, care impreuna cu S formeaza mantisa XM = S* XM*.In continuare, vom analiza particularitatile numerelor reprezentabile in campurile formatului din fig. 1.7. Referindu-ne, mai intai, la numarul din campul E, sa admitem ca, pe parcursul calculelor, ar fi trebuit sa obtinem un rezultat intermediar de forma , insa, datorita erorilor de trunchiere, rotunjire sau altele, respectivul rezultat prezinta o mantisa cu valoare mica, dar diferita de 0. In aceste conditii, daca XE este foarte mare, in locul doritei valori 0, se obtine o eroare corespunzator amplificata, cu mult diferita de valoarea 0. In ideea ca sa rezulte, in conditiile descrise, o eroare cat mai mica, in campul de exponent se impune stocarea numarului cel mai mic reprezentabil in cei e biti, sau, altfel spus, cel mai mare numar negativ. In SM, in campul de exponent se pot reprezenta numere apartinand intervalului inchis [-2e-1 + 1, 2e-1 -1], cu doua reprezentari pentru 0, iar in C2, se pot reprezenta numere apartinand intervalului inchis [-2e-1, 2e-1 -1] cu o singura reprezentare pentru 0. In consecinta, campului lui XE i se aloca valoarea (-2e-1 + 1) la reprezentarea numerelor in SM, respectiv valoarea (-2e-1) la reprezentarea numerelor in C2. La aceasta observatie se adauga si aceea in conformitate cu care, atunci cand mantisa devine 0, si campul de exponent sa fie 0, facilitand implementarea instructiilor care testeaza de zero avand aceeasi combinatie atat in virgula fixa, cat si in virgula mobila. Aceasta doleanta sugereaza ca exponenti de virgula flotanta sa fie reprezentati intr-un cod exces de (-2e-1 + 1), respectiv (-2e-1), excesul fiind denumit si deplasament (bias). In consecinta pentru a rezolva favorabil problema reprezentarii lui 0, valoarea din campul de exponent consta din suma dintre valoarea reala a exponentului la care se aduna valoarea bias-ului, fapt pentru care exponentul astfel obtinut se numeste deplasat (biased exponent) sau carateristica (characteristic). Admitand e=8, in tabelul din fig.1.8 se prezinta cateva din modelele de biti ale exponentului (exponent bit pattern), deplasat, corespondentele valori fara semn (unsigned value), respectiv cu semn (signed value), ultimele in doua situatii, cu bias=28-1-1=127, respectiv cu bias 28-1=128 [Haye 98].

Pe langa particularitatile reprezentarii in virgula flotanta ale exponentului, exista si unele vizand mantisa. Acestea sunt determinate de inerenta redundanta de reprezentare, in sensul ca exista mai multe forme pentru unul si acelasi numar (astfel 0.110 * 23 = 1.100 * 22 = 0.011 * 24 = .). Chiar daca pe parcursul procesarii interne din calculator nu este restrictionata forma de prezentare a numerelor de virgula flotanta, la introducerea datelor si la extragerea datelor s-a impus o forma unica, normala. Aceasta depinde de formatul de virgula fixa, SM sau C2, in care este reprezentat numarul mantisa. Astfel, daca acesta este un numar fractionar in SM, forma normalizata (nomalized form) impune ca bitul cel mai semnificativ a lui X*M, constituind bitul pozitionat imediat la dreapta virgulei, presupusa intre bitul de semn si msb-ul lui X*M, sa fie 1. Sunt eliminate deci acele 0-uri fara semnificatie valorica (leading 0's) dintre bitul de semn si primul bit 1 a lui X*M la parcurgerea lui X*M de la stinga la dreapta. Tot asa, daca mantisa este un numar fractionar in C2, forma normalizata impune ca bitul de semn sa difere valoric de msb-ul lui X*M prin care, la numere negative, se elimina bitii de 1 fara semnificatie valorica (leading 1's). Mai mentionam ca formele normalizate se obtin prin operatii de deplasare la stanga si corespunzatoarea decrementare a exponentului ( deplasarea la stanga a mantisei cu o pozitie este echivalenta cu inmultirea valorii acesteia cu 2, deci, pentru ca numarul sa-si pastreze valoarea, din valoarea exponentului este necesara scaderea unei unitati) sau de deplasare la dreapta si corespunzatoarea incrementare a exponentului (deplasarea la dreapta a mantisei cu o pozitie este echivalenta cu impartirea valorii acesteia cu 2). O introducerea mantisa in forma normalizata se mai numeste si impachetata (packed), astfel incat la introducerea datelor si la extragerea acestora, sunt impuse formele normalizate, impachetate, iar pe parcursul calculelor, numere pot fi procesate in forma nenormalizata (unnormalized form), dezpachetata. Ar mai fi de remarcat ca prin operatia de normalizare se restrange domeniul valoric pentru reprezentarea mantisei la .


Pentru concretete, ne vom referi in continuare la formatul standard IEEE 754 pentru reprezentarea numerelor de virgula flotanta, set de conventii aparut, la un moment dat, cand varietatea regulilor aplicate de diversi producatori de software a facut dificila, chiar imposibila, portabilitatea programelor intre calculatoare atunci a intervenit organizatia IEEE (Institute of Electrical and Electronics Engineers) care a sponsorizat crearea unui standard, ale carei conventii sunt respectate si astazi de aproape toti producatorii de calculatoare. Standardul IEEE 754 se refera al trei formate de virgula flotanta pe 32 de biti, pe 64 de biti si pe 80 biti, referirile noastre restrangandu-se la primele doua [Kuli02].

In conformitate cu standardul IEEE 754 pe 32 de biti, bitul mai din stanga este destinat semnului (bitul S din fig. 1.7), aceasta fiind urmat, inspre dreapta, de campul de exponent, pe 8 biti, in care se reprezinta numere binare intregi in exces de 127 (excess-127 binary integer) (vezi si fig. 1.8) si restuld e 23 de biti sunt alocati mantisei. Aici se impune o precizare fata de cele prezentate conex cu fig. 1.7, si anume faptul ca in acest caz, lui X*M ii corespunde denumirea de mantisa, care reprezinta partea fractionara a unui asa numit significand binar, reprezentat in SM si avand un bit de intreg ascuns (fraction part of sign-magnitude binary significand with hidden integer bit). Mai intai, sa aducem precizari legate de bitul ascuns a carui justificare rezida in faptul ca numerele normalizate, in SM, au in pozitia msb a valorii X*M (fig. 1.7) un 1; deci acest bit nu mai trebuie sa apara in mod explicit in forma impachetata, el fiind considerat implicit, ca si valoarea 2 pentru baza B. Bitul ascuns permite cresterea preciziei de reprezentare a numerelor. Cu aceste precizari, conform cu standardul IEEE 754 pe 32 de biti, un numar X este dat de:

(1.5)

In care se impune restrictia , fiind folosite nota tiile S pentru bitul de semn; pentru exponentul deplasat (la din fig. 1.7 se aduna valoarea excesului 127) si pentru mantisa (corespondenta lui din fig. 1.7), iar ( reprezinta numarul significand).

Mentionam ca limitarea domeniului valoric datorat normalizarii () se refera acum la significand, acoperind, datorita bitului ascuns, plaja . Sa evaluam, in continuare, limitele campului de variatie intre care sunt tolerate valori pentru numerele de virgula flotanta care corespund standardului IEEE 754.

Astfel, in fig. 1.9 se prezinta axa numerelor (number line), avand marcate patru valori de numere, notate de la la si valoarea 0. Numerele mai mici decat si mai mari decatnu pot fi reprezentate, depasind capacitatea disponibila in sens negativ (negative overflow), respectiv in sens pozitiv (positive overflow). Pe de alta parte, numerele cuprinse intre si 0 si cele dintre 0 si nu pot fi reprezentate, conform cu (1.5), nici ele fiindca este subdepasita capacitatea disponibila in sens negativ (negativ underflow), respectiv in sens pozitiv (positive underflow). Mentionam totusi ca, relativ la zonele de underflow, exista totusi posibiliatea de reprezentare apeland la exceptia constituita de numerele denormalizate (denormalized numbers). In incercarea de determinare a valorilor corespunzatoare capetelor de intervale, remarcam, mai intai, simetria pozitionariilor fata de 0, pe axa numerelor. Avem si , , fiind deci necesare evaluarii a doar doua numere. In ceea ce priveste pe , avem (fiind in partea negativa), (valoarea cea mai mare tolerata pentru exponent) si reprezentat de 23 biti de 1(valoarea cea mai mare reprezentabila). La dezpachetarea formatului descris, mai apare si bitul ascuns, astfel incat, tinand cont de (1.5), putem scrie:

(1.6)

Convertind valoarea obtinuta prin (1.6) in mai familiarul sistem cu puteri a lui 10, rezulta aproximativ , consistent mai mare decat cea corespunzatoarecapatului zonei de reprezentare a formatului SM pe 32 de biti, intrucat pentru acesta avem .

Pe de alta parte, in ceea ce priveste pe, avem, (valoarea cea mai mica tolerata pentru exponent) si reprezentat de 23 biti de 0 (valoarea cea mai mica reprezentabila). Ca si anterior, la dezpachetarea formatului, mai apare si bitul ascuns, astfel incat, tinand cont de (1.5), putem scrie:

  (1.7)

Convertind valoarea obtinuta prin (1.7) in mai familiarul sistem cu puteri a lui 10, rezulta aproximativ.

Trecand la formatul pe 64 biti, configuratia acestuia prevede bitul cel mai din stanga pentru semn, urmat de un camp de exponent pe 11 biti in care sunt reprezentate numere binare intregi in exces de 1023 si apoi restul de 52 biti destinati mantisei. Un numar X in formatul standard IEEE 754 pe 64 biti este dat de:

  (1.8)

in care se impune restrictiafiind utilizate acelasi notatii de la relatia (1.5) cu singura mentiune ca la exponentul deplasat valoarea excesului este acum 1023.

Legat de standardul IEEE 754, asupra caruia se va reveni in amanunt in capitolul 5, mai mentionam ca el permite semnalarea a patru situatii exceptie pentru a caror codificare se folosesc valorile limita ale exponentului, neutilizate pentru numere ordinare, adica 0 si 225 la formatul pe 32 biti, respectiv 0 si 2047 la formatul pe 64 biti. Astfel atunci cand in calitate de rezultate, intermediare sau finale, nu se obtin numere de virgula flotanta valide-cum ar fi, spre exemplu rezultatul unei impartiri, la 0-avem de-a face cu situatia exceptie: NaN(de la Not a Number). La sesizarea unei asemenea anomali, campul de exponent este setat la valoarea 255 la formatul pe 32 biti, respectiv la valoarea 2047 la formatul pe 64 biti, iar campul de mantisa poate avea orice valoare, dar diferita de 0. Daca insa, unul dintre rezultate apartin uneia dintre zonele de overflow (fig.1.9), atunci campul de exponent este setat la acelasi valori de mai sus, dar campul de mantisa este adus la zero. Cea de a treia exceptie corespunde situatiei cand un rezultat apartine uneia dintre zonele de underflow (fig.1.9). In acest caz, campul de exponent este setat pe 0 pentru ambele formate, iar campul de mantisa poate lua orice valoare diferita de zero. Rezultatul este codificat prin asa numita forma denormalizata [ScST05] a carei caracteristica este reducerea efectului underflow-ului printr-o sistematica pierdere de precizie. Un numar X in forma denormalizata pe 32 biti este data de:

  (1.9)

Daca numarul X de forma denormalizata este reprezentat pe 64 biti, atunci el este dat de:

  (1.10)

In amble relatii intervine valoare minima (1) de exponent deplasat din care se scade bias-ul egal cu 127, respectiv 1023, iar pierderea de precizie se remarca prin faptul ca anteriorul bit ascuns 1 devine 0.

In fine, ultima exceptie corespunde cazului in care unul din rezultate este 0, cand ambele campuri, de exponent si de mantisa, sunt setate pe 0, dar bitul de semn poate fi si 1. Mentionam ca asuprea modului de tratare a exceptiilor vom reveni in capitolul 5.

Pentru a avea un reper de comparare a standardului 754, ne vom referi la formatele IBM de virgula flotanta folosite la calculatoare mainframe (si 370). Exista trei formate, pe 32, 64 si 128 de biti, care toate au bitul, cel mai din stanga, de semn al mantisei, care este succedat de un camp de exponent de 7 biti, de aceiasi dimensiune la cele trei formate, in care se pot reprezenta numere intregi de exces de 64. Formatele difera prin numarul de biti ramasi pentru mantisa (24, 56 si 112, la acesta din urma, existand un subcamp de 8 biti neutilizat), in campul de mantisa (impreuna cu bitul de semn) fiind reprezentate numere fractionare in SM. Exista insa o diferenta majore fata de standardul IEEE 754, anume ca baza B este egala cu 16, iar numarul mantisa este interpretat in sistemul cu , in care se realizeaza inclusiv normalizarea sa. Cu aceste precizari, un numar X reprezentat in formatele IBM indiferent de numarul de biti, este dat de:

(1.11)

Formatele difera prin numarul de cifre hexazecimale (6, 14 respectiv 128) ale mantisei. Ar mai fi de mentionat ca regulile de prezentare IBM nu acopera exceptile NaN, overflow si de normalizare avand un corespondent doar pentru reprezentarea lui 0. Datorita valorii mari a bazei, plaja valorica acoperita este mult sporita fata de standarul IEEE 754, avand valori de delimitare a intervalelor de variatie (fig.1.9), pentru formatul pe 32 biti, de si.

In finalul acestei prezentari, sa elaboram, in calitate de exemplu, secventele de semne hexazecimale care corespund numarului zecimal conform, pe de o parte, cu standardul IEEE 754, si, pe de alta parte cu regulile IBM, ambele formate pe 32 de biti. In primul rand, aplicand metoda restului pentru partea intreaga a lui X, pespectiv metoda multiplicativa pentru partea fractionara, numarul se converteste in binar, obtinandu-se. Pentru a elabora reprezentarea in standardul IEEE 754, se aduce X la forma data de (1.5), prin care se ajunge la . La impachetare, renuntam la bitul ascuns si pentru exponentul deplasat rezulta valoarea (). In conecinta avem, in standardul IEEE 754, urmatoarea secventa binara , care covertita in sistemul hexazecimal, conduce la . Pe de alta parte, pentru a reprezenta in conformitate cu regulile IBM, se aduce X la forma data de (1.11), prin care se ajunge la. La impachetare, pentru exponentul deplasat rezulta valoarea (), astfel ca obtinem urmatoarea secventa binara 1.10000110010110101000110100, care, convertita in sistemul hexazecimal, conduce la.

Bibliografie

[Haye98]  John P. Hayes: "Computer Arhitecture and Organization" McGrawHill, Third Edition, 1998

[Stall99]  William Stallings: "Computer Organization and Arhitecture Designing for Performance" Prentice Hall, 1999

[Parh00]  Behrooz Parhami: "Computer Arithmetic. Algorithms and Hardware Designs" Oxford University Press, 2000

[HePa03]  John L. Hennessy, David A. Patterson: "Computer Architecture. A Quantitative Approach" Morgan Kaufman Publishers, Inc., Third Edition, 2003

[Omon94]  Amos Omondi: "Computer Arithmetic Systems. Algorithms, Architecture and Implementations" C.A.R. Hoare Series Editor, 1994

[ErLa04]  Milos D. Ercegovac, Tomas Lang: "Digital Arithmetic" Morgan Kaufman Publishers, 2004

[Kuli02]  Ubrich W. Kulisch: "Advanced Arithmetic for the Digital Computer Design of Arithmetic Units" Springer Verlag, 2002

[SwST05]  Eric M. Schwarz, Martin Schnookler, Son Dav Trong: "FPU Implementations with Denormalised Numbers" IEEE Trans. on Computers, vol.54, no.7, July 2005, pp.825-836

[RaCa06]  Sridhar Rajagopal, Joseph R. Cavallaro: "Truncated Online Arithmetic with Applications to Communication Systems" IEEE Trans. on Computers, vol.55, no.10, October 2006, pp. 1240-1252.





Politica de confidentialitate


creeaza logo.com Copyright © 2024 - Toate drepturile rezervate.
Toate documentele au caracter informativ cu scop educational.