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 decat
nu 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 |
![]() |
Copyright ©
2025 - 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 |