Documente Academic
Documente Profesional
Documente Cultură
- 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
26AA
66AA
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
1
_m_ <1 1.
b
m
M
t
1
e
E
m
M
c
E
E
E
1
+1
2
2
E -1
q = 2 sau q = sau q =
2 2
0,1 ... 1 b2
-1- q
= ( 1 - 2-M ) b 2
- 1- q
= 1,1 ... 1 22
-1- q
= ( 2 - 2-M ) 22
-1- q
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
SF_DACA
SF_DACA
SF_DACA
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.
MAXIM 1038
MAXIM 10308
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...
-
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
(-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.