Reprezentãri Binare Ale Numerelor Reale

download Reprezentãri Binare Ale Numerelor Reale

of 12

description

foarte explicita

Transcript of Reprezentãri Binare Ale Numerelor Reale

Reprezentri binare ale numerelor reale

Reprezentri binare ale numerelor reale

Aa cum am mai spus, n calculator se face difereniere ntre numerele ntregi i numerele reale. In fapt, termenul de numr real este impropriu n acest context, deoarece spaiul finit de reprezentare permite reprezentarea numai a unei submulimi finite de numere raionale. Reinem deci c orice numr real se reprezint n calculator aproximat printr-un numr raional.

Pentru astfel de reprezentri exist o constant prestabilit n, care indic pe ci bii se realizeaz reprezentarea. De regul, n este un multiplu de 8 (reprezentarea se face pe un numr ntreg de octei). Frecvent, reprezentrile se fac pe cuvnt sau pe dublucuvnt.

Reprezentarea semnului se face folosind bitul de semn. Bitul de semn are valoarea 0 pentru a indica un numr pozitiv i valoarea 1, pentru a indica un numr negativ.

Sunt utilizate dou tipuri de reprezentri binare ale numerelor reale:

- reprezentarea n virgul fix i

- reprezentarea n virgul flotant

Reprezentarea n virgul fix

Este o reprezentare natural care pune n eviden semnul, partea ntreag i partea fracionar a numrului. Dimensiunile locaiei de memorie n care se reprezint un numr n virgul fix este prefixat: 8, 16, 32 sau 64 de bii. Pentru a putea fi reprezentate, numerele sunt convertite (automat) n baza 2, aa cum am vzut n 1.2.2.

n acest mod de reprezentare, bitul cel mai semnificativ este rezervat semnului (0 pentru + i 1 pentru -). Urmeaz partea ntreag (mai exact cifrele prii ntregi ale valorii absolute a numrului) i apoi partea fracionar, ambele avnd dimensiuni (n bii) prefixate. Pentru a se reprezenta un numr real, se consider reprezentarea lui n baza 2. In locaia de memorie sunt plasai biii reprezentrii, alinierea fcndu-se la virgula virtual. In cursul reprezentrii sunt aplicate urmtoarele reguli:

- dac partea ntreag a numrului are prea puine cifre, se adaug la stnga zerouri suplimentare;

- dac partea ntreag are prea multe cifre, se pierd cifrele cele mai semnificative ce depesc spaiul de reprezentare;

- dac partea fracionar are prea puine cifre, se adaug la dreapta zerouri nesemnificative;

- 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 12 11 10 9 8 7 6 5 4 3 2 1 0

Sparte ntreagparte fracionar

virgul virtual

S considerm, spre exemplu, numrul (+10011,0101010101)2. El se va reprezenta n aceast locaie adugnd un 0 la partea ntreag i pierznd ultima zecimal (cea de-a 10-a). Bitul de semn va fi 0. Configuraia obinut o dm mai jos att n binar, ct i n hexazecimal. (Cititorul trebuie s se obinuiasc s converteasc rapid din baza 2 n baza 16, cum am artat n 1.3.3, deoarece scrierea hexazecimal este mult mai la ndemn):

0010011010101010=26AA

In mod similar numrul (-10011,0101010101)2 se va reprezenta (se modific doar bitul de semn):

1010011010101010=A6AA

Numrul (+11110011,0101010101)2 se va reprezenta pierzndu-se dou cifre semnificative de la partea ntreag:

0110011010101010=66AA

Reprezentarea n virgul fix limiteaz gama numerelor reprezentabile astfel. Fie n este lungimea n bii a locaiei, I numrul de bii rezervai pentru partea ntreag, iar F numrul de bii rezervai pentru partea fracionar. Rezult c n = 1+I+F

Cu aceste notaii, ( x ( 0 reprezentabil verific relaia:

2-F ( (x( ( 2I - 2-FDubla 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-FReprezentarea 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 ( beunde:

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 = 0,1257323 ( 103 = 0,00001257323 ( 107(0,0001257323)10 = 0,01257323 ( 10-2 = 0,1257323 ( 10-3

Plecnd de la acest mod de scriere a numerelor, exist diverse variante de reprezentare, pe care le vom defini n cele ce urmeaz.

DEFINITIA 3.4 Un numr real x se scrie cu mantis subunitar i exponent al unei baze b, dac x = 0,m ( be.

DEFINITIA 3.5 Un numr real x, x ( 0, este scrie cu mantisa subunitar normalizat, dac x este scris cu mantis subunitar i exponent al bazei b i dac are loc inegalitatea

seq Equation \* Arabic \h1.

De exemplu, pentru b = 10, numerele 0,1257323 ( 103 i 0,1257323 ( 10-3 sunt scrise normalizat.

Inmulirea numerelor scrise cu mantis subunitar provoac frecvent apariia mai multor cifre 0 imediat dup virgul. De aceea, se impune ca dup aproape fiecare operaie de nmulire s se efectueze i o operaie de normalizare. In scopul reducerii normalizrilor, se mai folosete un mod de scriere oarecum diferit.

DEFINITIA 3.6 Un numr real x, x ( 0, este scris cu mantisa ntre 1 i 2, dac x se scrie n baza 2, astfel:

x = 1,m ( 2eSpre exemplu, au loc egalitile:

(128,25)10 = (10000000,01)2 = (1,000000001)2(27Se observ c mantisa se nmulete cu o putere a lui 2 aparine i ea aparine intervalului [1,2). La acest mod de scriere, se noteaz cu m partea fracionar a mantisei.

DEFINITIA 3.7 Un numr real x este reprezentat n calculator n virgul flotant dac pentru determinarea reprezentrii se pleac de la scrierea lui x cu mantis subunitar sau cu mantis ntre 1 i 2.

Modul de scriere de la care se pleac depinde de tipul calculatorului. Calculatoarele mai vechi (pn la generaia a III-a) folosesc scrierea cu mantis subunitar. Calculatoarele actuale folosesc scrierea cu mantis ntre 1 i 2.

Indiferent de tipul calculatorului, mantisa se va reprezenta n baza 2.

Pentru reprezentarea ntregului numr este rezervat un numr standard de n bii. Semnificaiile acestor bii sunt:

s m t e

1M1E

s de 1 bit reine bitul de semn al mantisei;

m reprezentat pe M bii reine cifrele mantisei dac este vorba de mantis subunitar, sau partea de dup virgul a mantisei dac este vorba de mantis supraunitar;

t reine bitul de semn al exponentului,;

e avnd E bii conine cifrele exponentului.

Dac n este dimensiunea locaiei de reprezentare, avem n = 2+M+E. In cazul reprezentrii cu mantisa ntre 1 i 2, cifra 1 din stnga virgulei nu are bit rezervat! Calculatorul, tiind c este vorba de aceast reprezentare, adaug acest bit de valoare 1 numai n timpul calculelor.

Majoritatea calculatoarelor, din raiuni tehnice, nlocuiesc bitul t de semn al exponentului, folosind n schimb reprezentri de forma:

s m c

1ME

n care c este o mrime numit caracteristic. Valoarea ei se obine adunnd la exponentul e o constant a reprezentrii q, numit exces de exponent (deplasament, increment etc.). Deci:

c = e + q

Valorile posibile (numai numere ntregi) ale lui e sunt:

0 ( e + q ( 2E - 1 ( -q ( e ( 2E -1 - q

Valoarea constantei q este o constant constructiv a calculatorului. De obicei, ea are una dintre valorile:

Din modul de reprezentare rezult c un numr real se reprezint n virgul flotant aproximativ, avnd, n funcie de tipul mantisei, maximum M sau M+1 cifre binare semnificative. De asemenea, ordinul de mrime este de asemenea limitat de numrul de bii rezervai caracteristicii.

S vedem acum care este cel mai mic numr pozitiv reprezentabil i care este cel mai mare numr pozitiv reprezentabil. Cu notaiile de mai sus, aceste valori sunt urmtoarele:

Cel mai mic strict pozitiv n convenia reprezentrii subunitare nenormalizate este:

minim = 0,0...01(b-q = 2-M ( b-qIn convenia reprezentrii cu mantisa ntre 1 i 2, el este:

minim = 1,0...01(2-q = (1 + 2-M) ( 2-qCel mai mare numr posibil de reprezentat n convenia reprezentrii subunitare este:

Cel mai mare numr posibil de reprezentat n convenia reprezentrii supraunitare este:

O ultim precizare: nu toate numerele dintre "minim" i "MAXIM" pot fi reprezentate. Toate numerele de acelai ordin i care au aceleai prime M (M+1) cifre binare sunt identic reprezentate.

Procesoarele moderne adopt convenia supraunitar. In seciunea urmtoare vom prezenta trei astfel de reprezentri.

Standarde de reprezentare n virgul flotant

Societaea de Calculatoare IEEE [17] a fost cea care s-a preocupat i a elaborat norme de reprezentare a numerelor n virgul flotant. Aceste norme sunt 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)s(1,m(2e SF_DACA

b) DAC e = -q i m ( 0 ATUNCI x = (-1)s(0,m(2e SF_DACA

c) DAC e = -q i m = 0 ATUNCI x = (-1)s(0 SF_DACA

d) DAC e = q+1 i m = 0 ATUNCI x = (-1)s(oo SF_DACA

e) DAC e = q+1 i m ( 0 ATUNCI x NU EXISTA! SF_DACA

Semnificaia lui oo depinde de calculator i de limbajul care manipuleaz reprezentarea respectiv.

Conveniile Turbo Pascal deosebesc trei 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)s(1,m(2e SF_DACA

b) DAC e = -q i m = 0 ATUNCI x = 0 SF_DACA

c) DACA e = -q i m ( 0 ATUNCI x NU EXISTA! SF_DACA

S observm faptul c EXTENDED Turbo Pascal memoreaz ntreaga mantis, inclusiv cifra 1 din stnga virgulei!IEEE simpl precizie (4 octei):

s c=e+127 m

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 8 7 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.

Pentru caracteristica reprezentat pe 8 bii (IEEE simpl precizie i REAL Turbo Pascal):

minim ( 10-38 MAXIM ( 1038Pentru caracteristica reprezentat pe 11 bii (IEEE dubl precizie):

minim ( 10-308 MAXIM ( 10308Pentru caracteristica reprezentat pe 15 bii (IEEE dubl precizie extins, IEEE precizie cvadrupl i EXTENDED Turbo Pascal):

minim ( 10-4932 MAXIM ( 104932

Exemple. Mai nti vom arta cum se convertete un numr real n virgul flotant. S considerm numrul:

(-3572,54)10pe 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...)16Acest numr l trecem n baza 2 i obinem:

(-110111110100,10001010001111010111000010001010001111010111)2Acum l punem n forma normalizat, aa cum am artat mai sus, i reinem numai 52 de cifre dup virgul:

(-1,1011111010010001010001111010111000010001010001111010)2(211Din 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)16(211Semnul 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.

nIEEE

simpl.p.

4 oct.

8 c.h.IEEE

dubl.p.

8 oct. 16 c.h.IEEE

extins

12 oct.

24 c.h.IEEE

cvadrup.

16 oct.

32 c.h.Turbo

REAL

6 oct.

12 c.h.Turbo

EXTEND.

10 oct.

20 c.h.

+0

-0

+1

-1

+2

-2

+3

-3

+4

-4

+(-(0000...

8000...

3F80...

BF80...

4000...

C000...

4040...

C040...

4080...

C080...

7F80...

FF80...0000...

8000...

3FF0...

BFF0...

4000...

C000...

4008...

C008...

4010...

C010...

7FF0...

FFF0...00000...

80000...

3FFF8...

BFFF8...

40008...

C0008...

40008...

C0008...

40018...

C0018...

7FFF0...

FFFF0...00000...

80000...

3FFF0...

BFFF0...

40000...

C0000...

40004...

C0004...

40010...

C0010...

7FFF0...

FFFF0...00...00

80...00

00...81

80...81

00...82

80...82

40...82

C0...82

00...83

80...83

-

-00000...

80000...

3FFF8...

BFFF8...

40008...

C0008...

4000C...

C000C...

40018...

C0018...

-

-

Tabelul 3.4. Cteva numere reprezentate n virgul flotant

Operaia invers, adic obinerea valorii zecimale dintr-o configuraie care conine o reprezentare n virgul flotant se face urmnd calea invers compunerii configuraiei.

Pentru a nu mai repeta scrierile, s considerm configuraia hexazecimal pe patru octei (obinut, mai sus, la conversia n simpl precizie):

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 =

(-1BE9146)16 ( 16-6 ( 211 =

(-1BE9146)16 ( 2-13 =

(-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.