Sunteți pe pagina 1din 128

Arhitectura sistemelor de calcul

Curs
Dr
agulici Dumitru Daniel
Facultatea de matematic
a si informatic
a,
Universitatea Bucuresti

2014

Cuprins

1 Performata calculatoarelor
Conceptul de performant
a
M
asurarea performantei

2 Aritmetica sistemelor de calcul


Reprezentarea
Reprezentarea
Reprezentarea
Reprezentarea
Reprezentarea

numerelor n matematic
a
numerelor n calculator
numerelor naturale ca ntregi f
ar
a semn
numerelor ntregi n complement fat
a de 2
numerelor reale n virgul
a mobil
a

Bibliografie:

John L. Hennessy, David A. Patterson:


Organizarea si proiectarea calculatoarelor - interfata hardware/software,
Ed. All, 2002

Adrian Atanasiu:
Arhitectura calculatorului,
Ed. InfoData, 2006

Materialele de laborator (pentru limbajul MIPS)

Cuprins

1 Performata calculatoarelor
Conceptul de performant
a
M
asurarea performantei

2 Aritmetica sistemelor de calcul


Reprezentarea
Reprezentarea
Reprezentarea
Reprezentarea
Reprezentarea

numerelor n matematic
a
numerelor n calculator
numerelor naturale ca ntregi f
ar
a semn
numerelor ntregi n complement fat
a de 2
numerelor reale n virgul
a mobil
a

Cuprins

1 Performata calculatoarelor
Conceptul de performant
a
M
asurarea performantei

2 Aritmetica sistemelor de calcul


Reprezentarea
Reprezentarea
Reprezentarea
Reprezentarea
Reprezentarea

numerelor n matematic
a
numerelor n calculator
numerelor naturale ca ntregi f
ar
a semn
numerelor ntregi n complement fat
a de 2
numerelor reale n virgul
a mobil
a

Conceptul de performanta
Performanta poate avea mai multe acceptiuni:
(1) la un PC, suntem interesati de timpul de r
aspuns al unui program:
este timpul fizic scurs ntre momentul c
and lans
am cererea si momentul c
and
primim rezultatul; el trebuie s
a fie c
at mai mic;
(2) la un centru de calcul, suntem interesati de productivitate (throughput):
num
arul de sarcini executate n unitatea de timp; el trebuie s
a fie c
at mai mare.
Obs: (1) = (2) dar (2) =
6
(1).
De exemplu, centrul de calcul poate avea calculatoare lente dar multe; atunci
pe fiecare calculator vom avea timpi de r
aspuns mari, dar num
arul de sarcini
executate n unitatea de timp n centrul de calcul va fi tot mare.
Ambele acceptiuni ale performantei necesit
a abord
ari complexe, asa c
a pentru
simplitate trebuie s
a ne limit
am la una din ele.
In cele ce urmeaz
a, performanta se va referi la timpul de r
aspuns.
El priveste rularea unui program cu niste date si depinde de mai multi factori:
codul programului, datele cu care se ruleaz
a, promptitudinea cu care utilizatorul
introduce datele c
and sunt cerute, sistemul de operare, nc
arcarea sistemului
(activitatea concomitent
a a altor utilizatori), arhitectura hardware, etc.

Conceptul de performanta
(P) si a descrie dependenta
ei descresc
atoare n raport cu timpul de r
aspuns (T ), adopt
am formula:

Pentru a da o dimensiune numeric


a performantei

P=

1
(1)
T

Deja putem s
a compar
am performantele sau s
a calcul
am un raport al
performantelor unui program cu niste date fixate, pe dou
a masini X si

def

PX > PY TX < TY ,

Y:

PX
def TY
= n
= n (2)
PY
TX

(am notat cu PX , PY , TX , TY , performantele respectiv timpii de


r
aspuns, pe masinile X si Y ).

Conceptul de performanta
Timpul de r
aspuns (al unui program cu niste date) are urm
atoarele
componente:
(1) Timpul consumat cu executarea unor operatii din program;
(2) Timpul consumat cu executarea unor operatii din sistemul de operare, dar
legate de programul nostru (ex: apeluri sistem cerute de program);
(3) Timpul consumat de program n asteaptarea unor evenimente/resurse (ex:
programul este adormit n scanf() astept
and ca utilizatorul s
a introduc
a date
de la consol
a);
(4) Timpul n care programul este suspendat de sistemul de operare, pentru a
executa operatii adminstrative si sarcini legate de alte programe (care ruleaz
a
n paralel cu al nostru).
Not
am (1) + (2) = Timpul CPU
Deci timpul CPU este timpul consumat de program cu executarea unor operatii
(calcule), fie ele din program sau din sistemul de operare dar legate de
program. El este inclus n timpul de r
aspuns, iar ceea ce r
am
ane este timpul
consumat de program n asteptare, fie c
a asteapt
a un eveniment/resurs
a, fie c
a
este suspendat de sistemul de operare pentru a executa operatii adminstrative
si sarcini legate de alte programe.

Conceptul de performanta
Pe anumite sisteme exist
a comenzi cu ajutorul c
arora se pot m
asura si afisa
diferite componente ale timpului de r
aspuns pentru o anumit
a cerere. De
exemplu, n Linux comanda:

time cmd
afisaz
a diferite componente ale timpului de r
aspuns obtinute la executarea
comenzii cmd . De exemplu, poate afisa:

real
user
sys

2m39.000s
1m30.700s
0m12.900s

(timpul de r
aspuns)
(timpul utilizator, (1))
(timpul sistem, (2))

Astfel, putem calcula procentajul timpului CPU din timpul de r


aspuns:
90.7s + 12.9s
= 65%
159s
Deci > 1/3 din timpul de r
aspuns a fost consumat n asteptare, ceea ce ne
spune ceva despre mediul n care a fost rulat programul - resurse greu
disponibile, grad mare de nc
arcare a sistemului, etc.

Conceptul de performanta

Distingem ntre:
performanta sistemului = timpul de r
aspuns pe un sistem nenc
arcat;
performanta CPU = timpul CPU.
In cele ce urmeaz
a restr
angem si mai mult domeniul abord
arii si vom considera
c
a performant
a nseamn
a performanta CPU (deci n formula (1) este vorba
de timpul CPU).

Cuprins

1 Performata calculatoarelor
Conceptul de performant
a
M
asurarea performantei

2 Aritmetica sistemelor de calcul


Reprezentarea
Reprezentarea
Reprezentarea
Reprezentarea
Reprezentarea

numerelor n matematic
a
numerelor n calculator
numerelor naturale ca ntregi f
ar
a semn
numerelor ntregi n complement fat
a de 2
numerelor reale n virgul
a mobil
a

Masurarea performantei
Timpul (CPU) se poate m
asura n:
secunde (s)
cicli de ceas (c)
Leg
atura dintre cele dou
a este dat
a de peroada de ceas (durata ciclului) D
(m
asurat
a n secunde (s), nanosecunde (ns), etc.) sau frecventa F (m
asurat
a
n herzi (Hz), megaherzi (MHz), etc.), dup
a formula:

F =

1
D

C
and m
asur
am n cicli nu mai conteaz
a fizica circuitelor (durata ciclului) ci
doar mp
artirea programului n operatii masina (logica programului) si a
operatiilor masin
a n ciclii (logica circuitelor) - avem astfel posibilitatea s
a
compar
am d.p.v. logic o gam
a mai larg
a de masini.

Masurarea performantei
O m
arime care ne d
a indicatii asupra performantei este num
arul total de cicli
executati C .
El depinde de program, de date si de mp
artirea instructiunilor n cicli (am
presupus programul scris n limbaj masin
a); nu depinde de durata ciclului.
Performanta este cu at
at mai mare cu c
at C este mai mic.
Dac
a presupunem programul scris ntr-un limbaj de nivel nalt, conteaz
a si
mp
artirea codului surs
a n instructiuni masin
a - deci intervine si performanta
compilatorului.
Atunci putem calcula timpul CPU

dup
a formula:

C
(3)
F
Aceast
a formul
a arat
a c
a putem reduce timpul T (deci m
ari performanta)
reduc
and num
arul de cicli executatiC sau/si durata ciclului D .
T =C D =

Este dificil ns
a de redus simultan ambii factori - de obicei reducera unuia
atrage cresterea celuilalt.

Masurarea performantei
Pentru exemplificare, s
a consider
am urm
atorul model simplificat de circuit, care
execut
a c
ate o operatie la fiecare ciclu:
zW
}| {

H
CK


El este construit prin conectarea altor circuite mai simple, n serie, n paralel,
etc. (a se vedea capitolul de circuite logice), are o anumit
a l
atime w , dat
a de
num
arul de intr
ari si de conect
ari n paralel, si o anumit
a naltime H , dat
a de
num
arul de niveluri de conectare n serie; W este cu at
at mai mare cu c
at
datele de prelucrat au o dimensiune mai mare (mai multi biti), iar H este cu
at
at mai mare cu c
at operatia este mai complex
a.
La fiecare tact de ceas (CK ), datele de intrare sunt prelucrate prin circuit si
transformate n niste date de iesire, care la urm
atorul tact vor fi preluate ca
date intrare de un circuit conectat n continuare. Aceast
a prelucrare necesit
a
un anumit timp, iar D trebuie s
a fie acest timp - altfel, dac
a urm
atorul
tact vine prea devreme (nainte ca iesirile s
a fie stabile), vor fi culese (si trimise
mai departe) niste date eronate.

Masurarea performantei
Cresterea D nu este influientat
a de W , deoarece intr
arile sunt procesate n
paralel, ci de H (lungimea traseelor ce trebuie parcurse); n capitolul de
circuite logice vom vedea, de exemplu, c
a o adunare pe 32 biti se face la fel de
repede ca o adunare pe 64 biti (deoarece bitii operanzilor sunt procesati n
paralel), dar o adunare se face mai repede dec
at o nmultire.
S
a consider
am acum c
a circuitul desenat mai sus execut
a o operatie pe
parcursul mai multor cicli - deci sunt necesare mai multe treceri prin el pentru a
se efectua toate prelucr
arile necesare.
Intruc
at efectuarea unei anumite operatii necesit
a o anumit
a cantitate de
prelucr
ari (care depinde de natura matematic
a a operatiei), proiectantul
circuitului va avea de ales ntre dou
a variante:
- va mp
arti prelucrarea n etape putine, realizate c
ate una la ficare ciclu, dar
atunci la fiecare etap
a trebuie f
acute calcule multe, deci H va fi mare si astfel
D va fi mare; atunci, la executarea programului vom avea C mic si D mare;
- va mp
arti prelucrarea n etape multe si atunci la fiecare etap
a trebuie f
acute
calcule putine, deci H si D vor fi mici; atunci, la executarea programului vom
avea C mare si D mic.

Exercitiu rezolvat

Exercitiu rezolvat:
Un program (cu niste date fixate) dureaz
a pe masina A, av
and frecventa
400 MHz , 10 secunde. Dorim o masina B pe care rularea sa dureze
secunde. Proiectantul spune c
a poate creste frecventa, dar programul va
necesita de 1.2 ori mai multi cicli. Care va fi frecventa masinii B ?

Explicatie: proiectantul doreste reducerea duratei ciclului prin micsorarea


naltimii circuitelor (H din desenul anterior); atunci instructiunile vor necesita
mai multe cicluri pentru a fi executate, factorul mediu de multiplicare fiind
1.2.

Exercitiu rezolvat
Rezolvare:
Din enunt ni se dau:

FA = 400 MHz (frecventa masinii A, n MHz );


TA = 10 s (timpul pe masina A, n secunde s );
TB = 6 s (timpul pe masina B , n secunde s );
CB /CA = 1.2 (raportul numerelor de cicluri pe masinile A, B );
Se cere:

FB =? (frecventa masinii B , n MHz ).


Vom avea:

(3)

ip

(3) 1.2FA TA ip 1.2400 MHz10 s


=
TB
6s

A
FB = TCBB = 1.2C
=
TB
= 800 MHz

Comentariu:

desi s-a dublat frecventa, performanta (raportul timpilor) nu


s-a dublat; deci, performanta se obtine greu.

Exercitiu rezolvat
Sfat:
In redactarea rezolv
arilor, la efectuarea calculelor, mentionati la fiecare pas si
unit
atile de m
asur
a; utilitatea este urm
atoarea:

unele unitati de masura pot contine multipli care trebuie luati n


considerare (de exemplu, 1 Mega = 106 );

avem posibilitatea sa ne verificam corectitudinea aplicarii formulelor (de


exemplu, dac
a ne astept
am s
a obtinem secunde si rezult
a cicli, nu este
bine).

Conventie:
In cele ce urmeaz
a, m
arimea fizic
a va fi notat
a cu liter
a mare iar unitatea de
m
asur
a cu liter
a mic
a, pe c
at posibil acceasi liter
a.
De exemplu, C = 10 c nseamn
a c
a num
arul total de cicli executati este
10 (cicli).

Masurarea performantei
Alte dou
a m
arimi care ne dau indicatii asupra performantei sunt num
arul total
de instructiuni executate I si num
arul mediu ce cicli per instructiune
executati (engl: cycles per instruction) CPI , calculat dup
a formula:

CPI =

C
(4)
I

depinde de program si de date; nu depinde de mp


artirea instructiunilor n
cicli si nici de durata ciclului.
Performanta este cu at
at mai mare cu c
at I este mai mic.

CPI

depinde de program, de date si de mp


artirea instructiunilor n cicli; nu
depinde de durata ciclului.
Performanta este cu at
at mai mare cu c
at CPI este mai mic.

Masurarea performantei

CPI

ne permite s
a compar
am dou
a implement
ari hardware diferite ale unui
acelasi set de instructiuni.
De exemplu, s
a presupunem c
a avem de implementat o list
a ce contine
instructiunile + (adunare) si (nmultire).
Presupunem c
a avem dou
a implement
ari, n care num
arul de cicli necesari
fiec
arei instructiuni este dat de tabelul:
Implementare 1
Implementare 2

Nr. cicli
10 c
12 c

Nr. cicli
100 c
70 c

Se pune problema care implementare este mai bun


a. R
aspunsul depinde de
procentajul cu care sunt executate fiecare dintre cele dou
a instructiuni.
Daca pentru categoria de programe si de date avute n vedere, la rulare se
execut
a n medie > 93.75% + si restul , este preferabil
a prima
implementare; dac
a se execut
a n medie < 93.75% + si restul , este
preferabil
a a doua implementare (exercitiu !).
Num
arul mediu de cicli per instructiune calculat tin
and cont de ponderea
aparitiei fiec
arui tip de instructiuni este tocmai CPI . Asasar, cu c
at CPI
este mai mic, performanta este mai mare (pentru categoria de programe si de
date vizat
a).

Masurarea performantei
Din formulele

(3) si (4) obtinem ecuatia elementara a performantei:


T = I CPI D =

I CPI
(5)
F

Ea leag
a cei trei factori cheie ai performantei: num
arul de instructiuni
executate I , num
arul mediu de cicli pe instructiune executati CPI si durata
ciclului D (sau frecventa F ).
Exist
a interdependente ntre factori; de exemplu, sc
aderea CPI poate atrage
cresterea D (deoarece la fiecare ciclu se vor executa operatii mai multe si/sau
mai complexe).
Acesti factori trebuie considerati simultan atunci c
and analiz
am un sistem,
altfel putem trage concluzii eronate privind performanta - a se vedea urm
atorul
exercitiu rezolvat.

Masurarea performantei

Ne punem problema cum putem m


asura

folosind formulele (3) sau (5).

este greu de m
asurat - el depinde de program, de date si de arhitectur
a
(mp
artirea instructiunilor n cicli).

este mai usor de m


asurat - depinde doar de program si de date; unele
procesoare au chiar contoare hardware care num
ar
a instructiunile executate ele se folosesc la simul
ari.

CPI

este ns
a greu de m
asurat - el depinde de program, de date si de
arhitectur
a (mp
artirea instructiunilor n cicli).

Masurarea performantei
Uneori poate fi suficient
a o aproximare a lui C , obtinut
a urm
arind executia
programului pe clase de instructiuni. Mai exact:
Consider
am n clase de instructiuni.
De exemplu: clasa instructiunilor de salt (din care face parte goto), clasa
instructiunilor aritmetice aditive (din care fac parte adunarea, sc
aderea), clasa
instructiunilor aritmetice multiplicative (din care fac parte nmultirea,
mp
artirea).
Pentru fiecare clasa

k {1, . . . , n} notam cu CPIk

media numerelor

de cicli necesitati de instructiunile din clasa k .


De exemplu, CPIaditive este media dintre num
arul de cicli necesitati de o
adunare si num
arul de cicli necesitati de o sc
adere.
Not
am deci c
a la calcularea lui CPIk se ia c
ate un singur exemplar din fiecare
instructiune a clasei k , f
ar
a ponderi/procentaje.
Pentru un program si niste date considerate, not
am cu Ik num
arul de
instructiuni executate din clasa k , k {1, . . . , n}.

Masurarea performantei
Atunci pentru programul, datele si arhitectura considerate, vom avea:

C'

n
X

(CPIk Ik ) (6)

k=1
Valorile n si CPIk , k {1, . . . , n}, depind doar de arhitectur
apentru o masin
a dat
a ele sunt fixate si pot fi comunicate prin documentatia
masinii.
Valorile Ik ,
arhitectur
a.

k {1, . . . , n}, depind de program si de date, nu si de

Astfel, pe o masin
a dat
a, dac
a vrem s
a afl
am (cu aproximatie) num
arul de cicli
C consumati la rularea unui anumit program cu anumite date, este suficient sa
afl
am valorile Ik , k {1, . . . , n}, iar acestea sunt mai usor de aflat,
deoarece instructiunile se num
ar
a mai usor dec
at ciclii.

Masurarea performantei
Valoarea

calculat
a cu formula (6) este ns
a doar una aproximativ
a.

De exemplu, presupunem c
a pe o masin
a dat
a avem:
Clasa
aditive
multiplicative

Rezult
a

Instructiuni
adunare
sc
adere
nmultire
mp
artire

Nr. de cicli necesitati


1
3
10
30

CPIaditive = 2, CPImultiplicative = 20.

Consider
am un program si niste date a.. la rulare se execut
a o adunare si o
nmultire.
Valoarea exact
a a lui C este: 1 + 10 = 11.
Valoarea lui C calculat
a cu formula (6) este: 2 + 20 = 22.
Consider
am acum un program si niste date a.. la rulare se execut
a o sc
adere si
o mp
artire.
Valoarea exact
a a lui C este: 3 + 30 = 33.
Valoarea lui C calculat
a cu formula (6) este tot: 2 + 20 = 22.

Masurarea performantei

Intr-adev
ar, cu formula (6) am considerat de fiecare dat
a c
a se execut
ao
instructiune aditiv
a si o instructiune multiplicativ
a, nesesiz
and c
a la primul
program se execut
a cele mai rapide instructiuni din cele dou
a clase, iar la al
doilea program cele mai lente.
Valoarea lui C calculat
a cu formula (6) se apropie de valoarea exact
a cu at
at
mai mult cu c
at din fiecare clas
a instructiunile se execut
a cu ponderi mai
apropiate (cam tot at
atea adun
ari c
ate sc
aderi, cam tot at
atea nmultiri c
ate
mp
artiri).

Exercitiu rezolvat
Exercitiu rezolvat:
Pe o masin
a dat
a, avem urm
atoarele clase de instructiuni si
clasa

A
B
C

CPI

asociate:

CPIclasa
1
2
3

Consider
am dou
a programe si niste date, pentru care s-au m
asurat:
Program
programul
programul

Nr. de instructiuni executate din fiecare clas


a

1
2

A
2
4

B
1
1

Se cer: a) Care program execut


a mai multe instructiuni ?
b) Care program este mai rapid ?
c) C
at este CPI pentru fiecare program ?

C
2
1

Exercitiu rezolvat

Rezolvare:
a) Not
am:

Ikp = numarul de instructiuni executate de programul p {1, 2} din


clasa k {A, B, C };
p
I = numarul total de instructiuni executate de programul p {1, 2}.
Avem:

I 1 = IA1 + IB1 + IC1 = 2i + 1i + 2i = 5i


I 2 = IA2 + IB2 + IC2 = 4i + 1i + 1i = 6i
1
2
Comentariu: am obtinut I < I , ceea ce pare s
a arate c
a programul 1 este
mai performant.

Exercitiu rezolvat
b) Not
am:

C p = numarul total de cicli executati de programul p {1, 2}.


Folosind formula (6), avem:

C 1 = CPIA IA1 + CPIB IB1 + CPIC IC1


= 1 ci 2i + 2 ci 1i + 3 ci 2i = 10c
C 2 = CPIA IA2 + CPIB IB2 + CPIC IC2
= 1 ci 4i + 2 ci 1i + 3 ci 1i = 9c
Comentariu:
1
2
Am obtinut C > C , ceea ce pare s
a arate c
a programul 2 este mai
performant, n contradictie cu a).
Dintre m
arimile I si C , cea care m
asoar
a realist durata executiei este C ,
deoarece foloseste aceeasi unitate de m
asur
a, ciclul (instructiunile nu dureaz
a
toate la fel de mult). Deci r
aspunsul corect este cel dat de b).
Explicatia erorii de la a): programul 1 execut
a instructiuni mai putine, dar mai
lungi (execut
a dou
a din clasa C , care dureaz
a n medie c
ate 3 cicli).

Exercitiu rezolvat
c) Not
am:

CPI p = numarul mediu de cicli pe instructiune executati de programul


p {1, 2}.
Folosind formula (4), avem:

CPI 1 =
CPI 2 =

C1
I1
C2
I2

=
=

c
10c
5i = 2 i (sau 2cpi ).
9c
c
6i = 1.5 i (sau 1.5cpi ).

Comentariu:
1
2
Am obtinut CPI > CPI , ceea ce pare s
a arate c
a programul 2 este
mai performant, ca la b) (si n contradictie cu a)).
Intruc
at am v
azut c
a b) ofer
a r
aspunsul corect, rezult
a c
a, cel putin n acest
caz, m
arimea CPI descrie performanta mai bine dec
at m
arimea I .
R
aspunsul de la c) era de asteptat, deoarece programul 2 este mai rapid desi
execut
a mai multe instructiuni si de aceea trebuie ca instructiunile executate de
el s
a fie mai rapide.
Oricum, acest exercitiu ilustreaz
a ce am spus mai devreme, c
a factorii care
influienteaz
a performanta trebuie considerati simultan atunci c
and analiz
am un
sistem, altfel putem trage concluzii eronate privind performanta.

Masurarea performantei
O alt
a m
arime care ne d
a indicatii asupra performantei este frecventa de
executare a instructiunilor:

FI =
Intruc
at de obicei valorile lui

FI

I
(7)
T

(m
asurate n instructiuni pe secund
a) sunt

mari, se obisnuieste introducerea nc


a unui factor
obtin
andu-se m
arimea:

MIPS =

106 la numitor,

I
(8)
T 106

m
asurat
a n milioane de instructiuni pe secund
a (millions instructions per
second).

FI si MIPS depind de program, de date, de mpartirea instructiunilor n


cicli si de durata ciclului.
Performanta este cu at
at mai mare cu c
at FI si MIPS sunt mai mari.

Masurarea performantei

Ca si n cazul altor m
arimi discutate mai devreme, FI si MIPS trebuie
considerate mpreun
a cu ceilalti factori atunci c
and analiz
am un sistem, altfel
putem trage concluzii eronate privind performanta - a se vedea urm
atorul
exercitiu rezolvat.

Exercitiu rezolvat
Exercitiu rezolvat:
Pe o masin
a dat
a, av
and frecventa de
de instructiuni si CPI asociate:
clasa

A
B
C

500 MHz , avem urmatoarele clase


CPIclasa
1
2
3

Consider
am dou
a programe si niste date, pentru care s-au m
asurat:
Program
programul
programul

Nr. de instructiuni executate din fiecare clas


a

1
2

A
5
10

B
1
1

C
1
1

Se cer: a) Care sunt timpii CPU pentru cele dou


a programe ?
b) Care sunt valorile MIPS pentru cele dou
a programe ?

Exercitiu rezolvat
Rezolvare:
Situatia seam
an
a cu cea din exercitiul precedent si atunci la fel ca acolo putem
afla num
arul total de cicli executati. Acum stim n plus si frecventa, iar aceasta
ne va permite ca din num
arul de cicli s
a afl
am timpii CPU.
Not
am:

Ikp = numarul de instructiuni executate de programul p {1, 2} din


clasa k {A, B, C };
p
I = numarul total de instructiuni executate de programul p {1, 2}.
C p = numarul total de cicli executati de programul p {1, 2}.
T p = timpul CPU consumat de programul p {1, 2}.
MIPS p = valoarea MIPS pentru programul p {1, 2}.

Exercitiu rezolvat
a) Folosind formula (6), avem:

C 1 = CPIA IA1 + CPIB IB1 + CPIC IC1


= 1 ci 5i + 2 ci 1i + 3 ci 1i = 10c
C 2 = CPIA IA2 + CPIB IB2 + CPIC IC2
= 1 ci 10i + 2 ci 1i + 3 ci 1i = 15c
Atunci, folosind formula (3), avem:
1

T 1 = CF = 50010c
MHz =
= 2 2 108 s
T 2 = CF = 50015c
MHz =
1

10c
500106 Hz
15c
500106
2

c
s

10c
500106

c
s

= 3 108 s

Comentariu: am obtinut T < T , ceea ce pare s


a arate c
a programul 1
este mai performant. M
arimea T m
asoar
a realist performanta, deoarece
foloseste acelasi etalon pentru ambele programe (toate secundele sunt la fel de
lungi).

Exercitiu rezolvat
b) Avem:

I 1 = IA1 + IB1 + IC1 = 5i + 1i + 1i = 7i


I 2 = IA2 + IB2 + IC2 = 10i + 1i + 1i = 12i
Atunci, folosind formula (8), avem:

I1
T 1 106 mips
I2
T 2 106 mips

7i
= 2108
106 mips = 350 mips
= 31012i
8 106 mips = 400 mips
1
2
Comentariu: am obtinut MIPS < MIPS , ceea ce pare s
a arate c
a
programul 2 este mai performant, n contradictie cu a).

MIPS 1 =
MIPS 2 =

Am v
azut ns
a c
a r
aspunsul corect este cel dat de a). Explicatia erorii de la b)
const
a n faptul c
a programul 2 execut
a instructiuni rapide (deci execut
a multe
instructiuni pe secund
a), dar foarte multe (si astfel necesit
a multe secunde, mai
multe dec
at programul 1).
Asadar, un MIPS mare nu nseamn
a neap
arat un timp mai scurt.
Deci, parametrii performantei trebuie analizati mpreun
a, nu izolat.

Cuprins

1 Performata calculatoarelor
Conceptul de performant
a
M
asurarea performantei

2 Aritmetica sistemelor de calcul


Reprezentarea
Reprezentarea
Reprezentarea
Reprezentarea
Reprezentarea

numerelor n matematic
a
numerelor n calculator
numerelor naturale ca ntregi f
ar
a semn
numerelor ntregi n complement fat
a de 2
numerelor reale n virgul
a mobil
a

Numerele si operatiile cu ele sunt concepte matematice.


Pentru a comunica numerele si a efectua usor operatiie cu ele, transcriem
numerele prin niste reprezent
ari simbolice si operatiile cu numere prin algoritmi
de calcul cu aceste reprezent
ari.
Modul uzual de reprezentare a numerelor n matematic
a este prin scriere
pozitional
a, ca sir de cifre ntr-o anumit
a baz
a de enumeratie, de regul
a baza
10. Algoritmii de calcul cu aceste reprezent
ari opereaz
a cifr
a cu cifr
a,
propag
and un transport sau lu
and un mprumut.
Modul de reprezentare a numerelor n calculator si algoritmii de calcul cu aceste
reprezent
ari seam
an
a cu cele folosite n matematic
a, dar nu sunt identice. De
exemplu, n matematic
a putem folosi usor oric
ate simboluri ajut
atoare: virgula,
semnul -, etc. In calculator, pentru a stoca informatii se folosesc biti, iar un
bit stocheaz
a o informatie bivalent
a; odat
a ce am fixat semnificatia ei, de
exemplu cifra 0 si respectiv cifra 1, nu mai avem la dispozitie o alt
a valoare de
bit care s
a nsemne virgul
a sau - - totul trebuie s
a fie doar sir de cifre (binare).
In prima sectiune vom descrie pe scurt modul de reprezentare si algoritmii de
calcul cu reprezent
ari folosite n matematic
a, iar n urm
atoarele sectiuni le vom
detalia pe cele folosite n calculator.

Cuprins

1 Performata calculatoarelor
Conceptul de performant
a
M
asurarea performantei

2 Aritmetica sistemelor de calcul


Reprezentarea
Reprezentarea
Reprezentarea
Reprezentarea
Reprezentarea

numerelor n matematic
a
numerelor n calculator
numerelor naturale ca ntregi f
ar
a semn
numerelor ntregi n complement fat
a de 2
numerelor reale n virgul
a mobil
a

Reprezentarea numerelor ntr-o baza

Modul de reprezentare a numerelor ntr-o anumit


a baz
a si algoritmii de calcul
cu aceste reprezent
ari sunt cunoscute din scoal
a/liceu, nu le vom descrie cu
toate detaliile ci doar vom reaminti c
ateva notiuni si algoritmi, evidentiind
anumite idei.
La baza scrierii pozitionale ntr-o baz
a se afl
a scrierea polinomial
a n puterile
succesive ale bazei.
De exemplu, reprezentarea 1100 n baza 2 nseamn
a num
arul care se calculeaz
a
1 23 + 1 22 + 0 21 + 0 20 , adic
a 12.

Reprezentarea numerelor ntr-o baza


C
and definim modul de reprezentare si de calcul cu numerele ntr-o baz
a b,
interfer
a dou
a limbaje:
- limbajul matematic combinat cu cel natural, n care vorbim (este limbajul
gazd
a a discursului);
- limbajul reprezent
arilor n baza b, despre care vorbim (este limbajul obiect al
discursului).
Mai spunem c
a primul este metalimbaj pentru al doilea.
C
and ne afl
am n metalimbaj si vrem s
a comunic
am numere sau operatii cu ele,
trebuie s
a folosim tot reprezent
ari si algoritmi cu aceste reprezent
ari, deoarece
nu putem comunica direct niste idei ci doar prin niste formaliz
ari ale lor. In
acest scop, folosim reprezent
arile si algoritmii din baza 10 (se presupun
cunoscuti).
Deci, n final, metalimbajul si limbajul sunt limbaje de acelasi tip: cel al
reprezent
arilor pozitionale ntr-o baz
a, doar c
a metalimbajul este n baza 10 iar
limbajul n baza b.
In metalimbaj vom scrie reprezent
ari si algoritmi cu reprezent
ari dar ne vom
g
andi la numere si operatii cu numere, n limbaj vom scrie reprezent
ari si
algoritmi cu reprezent
ari si ne vom g
andi chiar la ele (reprezentarea pozitional
a
n baza b este un sir finit de simboluri, numite cifre ale bazei b).

Reprezentarea numerelor ntr-o baza


Anumite sintagme pot ap
area la fel si n metalimbaj si n limbaj, iar dac
a nu se
deduce din context unde ne afl
am, pot ap
area confuzii. De exemplu, scrierea
1 1 0 0 poate fi considerat
a n metalimbaj (baza 10) si nseamn
a num
arul o
mie o sut
a, sau n limbajul bazei 2 si nsemn
a sirul 1 1 0 0, prin care se
reprezint
a num
arul doisprezece.
De aceea, c
and este pericol de confuzie, vom folosi scrieri diferite. Mai exact:
- o scriere de forma 12 este n metalimbaj si nseamn
a num
arul doisprezece;
- o scriere de forma (12)2 este tot n metalimbaj si nseamn
a c
a num
arului
doisprezece ii aplic
am procedeul de conversie n baza doi ((.)2 este de fapt o
functie bijectiv
a de la numere/reprezent
ari zecimale la reprezent
ari binare);
a reprezentarea (sirul de
- o scriere de forma 11002 este n limbaj si nseamn
cifre binare) 1 1 0 0, prin care se reprezint
a num
arul doisprezece.
Dac
a nu este pericol de confuzie, putem folosi notatii simplificate. De exemplu,
dac
a din context este clar
a baza, putem scrie doar 1100, iar dac
a este clar si
nivelul (metalimbaj/limbaj), putem scrie doar 1100.
In restul acestei sectiuni vom descrie (reaminti) regulile de conversie a
numerelor dintr-o baz
a n alta si algoritmii de calcul cu numerele reprezentate
ntr-o anumit
a baz
a.

baza 10 baza b; numere ntregi

Trecerea din baza 10 ntr-o baz


a b:
Cazul numerelor ntregi:
Fie x Z/ si b N
I , b 2, baza.
Consider
am x si b scrise n baza 10; facem calculele n baza 10.
Regul
a:
- mp
artim cu rest pe |x| la b, apoi c
atul la b, etc., p
an
a obtinem c
atul 0;
- lu
am resturile n ordine invers
a si le nlocuim cu cifre ale bazei b;
- dac
a x < 0, punem n fat
a .
Observatie: dac
a am continua procedeul dup
a ce am obtinut c
atul 0, am obtine
noi c
aturi si resturi 0, care ar genera cifre 0 n st
anga reprezent
arii, iar acestea
nu schimb
a semantica reprezent
arii (nu afecteaz
a valoarea reprezentat
a).

baza 10 baza b; numere ntregi


Calculele se pot redacta astfel (C0, C1, ..., Cn sunt cifre ale bazei b):
x
.
.
.
rest0
C0

|
b
|-------| cat0 |
b
.
|-------.
| cat1
.
.
Obtinem reprezentarea:
rest1
.
C1
.
cat(n-1) |
b
.
|-------.
| 0
.
restn
Cn
<======= citim

-----------Cn ... C1 C0

baza 10 baza b; numere ntregi


Exemplu: (4235)16 = ?
4235
32
--103
96
-==75
64
-11
B

| 16
|----| 264 | 16
16 |------ | 16 | 16
104
16 |----96
-- | 1 | 16
-0
0 |----==8
0
- | 0
8
1
1

<=======

Deci: (4235)16 = 108B

baza 10 baza b; numere ntregi

Dac
a b are (n baza 10) doar o cifr
a, atunci catk si restk se pot calcula
mintal, iar calculele se pot redacta mai simplu:
x
cat0
cat1

| rest0
| rest1
|
.
.
.
cat(n-1) | restn
0
|

C0
C1

Cn

/\
||
||
||
||
||
|| citim

Obtinem reprezentarea:

-----------Cn ... C1 C0

baza 10 baza b; numere ntregi


Exemplu: (105)2 = ?
105
52
26
13
6
3
1
0

|
|
|
|
|
|
|
|

1
0
0
1
0
1
1

/\
||
||
||
||
||
||

(pentru b < 10 cifrele bazei b sunt aceleasi ca n baza 10 si nu este nevoie s


a le
mai scriem o dat
a n dreapta).
Deci: (105)2 = 1101001

baza 10 baza b; numere reale

Cazul numerelor reale (fractionare):


Fie x R
I si b N
I , b 2, baza.
Consider
am x si b scrise n baza 10; facem calculele n baza 10.
Regul
a:
- partea ntreag
a a lui |x| se reprezint
a ca la numere ntregi;
- partea fractionar
a a lui |x| se nmulteste cu b si se ia partea ntreag
a, apoi
partea fractionar
a r
amas
a se nmulteste cu b si se ia partea ntreag
a, etc., p
an
a
|
obtinem o parte fractionar
a 0 sau care a mai fost nt
alnit
a (dac
a x R
I \Q
procedeul continu
a la infinit, nu este algoritm);
- lu
am p
artile ntregi obtinute n ordine direct
a si le nlocuim cu cifre ale
bazei b;
- dac
a x < 0, punem n fat
a .

baza 10 baza b; numere reale


Observatii:
- regula nu o contrazice pe cea pentru numere ntregi ci o completeaz
a
(afirm
a ceva si pentru partea fractionar
a, care la numere ntregi lipseste);
cifrele produse de cele dou
a p
arti ale regulii (pentru partea ntreg
a, respectiv
fractionar
a) nu se suprapun, deoarece se afl
a n p
arti diferite ale virgulei;
- cu partea ntreag
a facem mp
artiri succesive la b si obtinem cifre de la
virgul
a spre st
anga; cu partea fractionar
a facem nmultiri succesive cu b si
obtinem cifre de la virgul
a spre dreapta; per total, cifrele se obtin de la virgul
a
spre extremit
ati;
- fiecare din p
artile fractionare obtinute reprezint
a un num
ar real din
intervalul [0, 1); c
and o nmultim cu b, obtinem un num
ar real din intervalul
[0, b); lu
and apoi partea ntreag
a, obtinem un num
ar ntreg din multimea
{0, . . . , b 1}, care corespunde unei cifre n baza b - aceasta este urm
atoarea
zecimal
a (n baza b); cu partea fractionar
a r
amas
a continu
am procedeul;

baza 10 baza b; numere reale

- p
an
a c
and se aplic
a procedeul:
dac
a la un moment dat nt
alnim o parte fractionar
a 0, nmultind cu b
obtinem o nou
a parte ntreag
a (i.e. o nou
a zecimal
a) 0 si o nou
a parte
fractionar
a 0, etc., deci continu
and vom obtine noi zecimale 0 nesemnificative;
de aceea ne putem opri si conchidem c
a am obtinut o fractie zecimal
a finit
a;
dac
a la un moment dat obtinem o parte fractionar
a care a mai fost
nt
alnit
a, continu
and procedeul vom obtine aceeasi succesiune de zecimale ca
dup
a prima nt
alnire; de aceea ne putem opri si conchidem c
a am obtinut o
fractie zecimal
a periodic
a (simpl
a sau mixt
a); perioada este succesiunea de
zecimale generate dupa prima nt
alnire;

baza 10 baza b; numere reale


ntruc
at partile fractionare generate de procedeu reprezint
a numere reale
din intervalul [0, 1) si exist
a o infinitate de asemenea numere distincte, este
posibil ca prin continuarea procedeului s
a nu obtinem nici o dat
a o parte
fractionar
a 0 sau care a mai fost nt
alnit
a; atunci procedeul nu se termin
a (nu
este algoritm); acest lucru se nt
ampl
a ns
a doar n cazul numerelor irationale;
|, atunci
mai exact: dac
ax Q
n orice baz
a b reprezentarea lui x va fi o
|,
fractie zecimal
a finit
a, periodic
a simpl
a sau periodic
a mixt
a; dac
a x R
I \Q
atunci n orice baza b reprezentarea lui x va fi o fractie zecimal
a infinit
a
neperiodic
a;
deci, dac
a ntr-o aplicatie se va cere reprezentati 7.8 n baza 2, vom sti
c
a procedeul se termin
a (si obtinem o fractie zecimal
a finit
a, periodic
a simpl
a
sau periodic
a mixt
a), deoarece n baza surs
a (adic
a 10) num
arul s-a reprezentat

printr-o fractie zecimal


a finit
a, deci este rational; nu vom cere reprezentati 2
n baza 2;
atentie ns
a c
a un acelasi num
ar rational poate avea ntr-o baz
ao
reprezentare prin fractie zecimal
a finit
a, n alta prin fractie zecimal
a periodic
a
simpl
a, n alta prin fractie zecimal
a periodic
a mixt
a.

baza 10 baza b; numere reale


Exemplu: (7.8)2 = ?
7
3
1
0

|
|
|
|

1
1
1

/\
||
||

2 * 0.8 = 1.6 || citim


||
2 * 0.6 = 1.2 ||
||
2 * 0.2 = 0.4 ||
||
2 * 0.4 = 0.8 \/
2 * 0.8
stop, am reintalnit 0.8

Deci: (7.8)2 = 111.(1100)

baza 10 baza b; numere reale


Dac
a b are (n baza 10) doar o cifr
a, atunci nmultirea unei p
arti fractionare cu
b se poate face mintal, iar calculele se pot redacta mai simplu:
parte_fractionara_0
parte_fractionara_1
.
.
.

|
|
|
|
|

zecimala_1
zecimala_2

In cazul exemplului de mai sus vom avea:


0.8
0.6
0.2
0.4
0.8

|
|
|
|
|

1
1
0
0

||
||
||
\/

|| citim
||
||
||
\/

baza 10 baza b; numere reale

Exemplu: (7.8)5 = ?
7
1
0

|
|
|

2
1

0.8
0

|
|

4
stop, am intalnit partea fractionara 0

Deci: (7.8)5 = 12.4


Observ
am c
a 7.8 se reprezint
a n baza 2 prin fractie zecimal
a periodic
a, iar n
baza 5 (si n baza 10) prin fractie zecimal
a finit
a.

baza 10 baza b; numere reale

Dac
a num
arul x este dat (n baza surs
a, 10) printr-o fractie zecimal
a periodic
a
(simpl
a sau mixt
a), nu putem efectua direct calculele regulii de conversie,
deoarece nu stim s
a nmultim fractii zecimale infinite.
Regula de conversie se bazeaz
a ns
a pe propriet
ati matematice, care nu depind
de modul de reprezentare a numerelor; de aceea, o putem aplica, dar vom alege
alte reprezent
ari, convenabile - anume prin fractii ordinare.

baza 10 baza b; numere reale

Exemplu: (4.(3))2 = ?
4
2
1
0

|
|
|
|

0
0
1

2 * 0.(3) = 2 * (3/9) = 2 * (1/3) = (2/3) = 0 + (2/3)


2 * (2/3) = 4/3 = 1 + (1/3)
2 * (1/3) stop, am reintalnit 1/3

Deci: (4.(3))2 = 100.(01)

baza b baza 10
Trecerea dintr-o baz
a b n baza 10 (b N
I , b 2):
Regul
a:
- nlocuim cifrele cu numerele pe care le reprezint
a (scrise n baza 10) si
scrierea pozitional
a cu scriere polinomial
a n puterile succesive ale lui b (scris
tot n baza 10);
- facem calculele n baza 10.

Exemple:
3
2
1
0
(1101)1
2 = 1 2 + 1 2 + 0 2 + 1 2 = 13
2
1
0
(A2C )1
16 = 10 16 + 2 16 + 12 16 = 2604
1
0
1
(12.4)1
=7+
5 = 15 +25 +45

4
5

39
5

= 7.8

Observatii:
- n primul exemplu, n st
anga primului =, 0 si 1 nseamn
a cifre (n baza 2),
iar n dreapta numere (n baza 10); n al doilea exemplu confuzia ntre cifre si
numere este mai mic
a;
- n ultimul exemplu vedem c
a pentru cifrele p
artii fractionare exponentii scad
n continuare, la valori negative.

baza b baza 10
Dac
a reprezentarea n baza b de la care pornim este o fractie zecimal
a
periodic
a (simpl
a sau mixt
a), scrierea polinomial
a rezultat
a este infinit
a.
O asemenea sum
a se poate calcula folosind instrumentul matematic al seriilor.
Putem evita folosirea seriilor dac
a nlocuim fractia zecimal
a surs
a cu o fractie
ordinar
a (n baza b).
Regula de trecere de la fractie zecimal
a la fractie ordinar
a n baza b este la fel
ca n baza 10, cu diferenta c
a 9 se nlocuieste cu b 1.

Exemplu:
(10.1(011))1
2 = (10 +
2+

10
14

38
14

19
7

10111 1
)2
1110

= (10)1
2 +

1
(1011)1
2 (1)2

(1110)1
2

=2+

111
14

= 2.(714285)

Observatie: am folosit si faptul c


a functiile de forma (.)b si (.)1
au propriet
ati
b
de morfism (comut
a cu operatiile aritmetice).

baza b1 baza b2

Trecerea dintr-o baz


a b1 ntr-o baz
a b2 (b1 , b2 N
I , b1 , b2 2):
Problema este de aceeasi natur
a ca n cazul trecerilor baza 10 baza b si
baza b baza 10 de mai nainte, deci am putea s
a aplic
am regulile de acolo.
Dar, dac
a proced
am ca la trecerea baza 10 baza b, va trebui s
a facem
calculele n baza b1 , iar dac
a proced
am ca la trecerea baza b baza 10, va
trebui s
a facem calculele n baza b2 .
Dac
a vrem s
a facem calculele doar n baza 10, vom trece prin baza 10
compun
and cele dou
a reguli.
Regul
a:
baza b1 baza 10 baza b2

baza b1 baza b2
Trecerea baza b1 baza b2 se poate face mai simplu, f
ar
a a mai trece prin
baza 10, dac
a una din baze este putere a celeilalte:
Trecerea b k b (b, k N
I b 2, k 1)
Regul
a:
- nlocuim fiecare cifr
a a bazei b k cu c
ate un grup de k cifre ale bazei b;
- elimin
am 0-le extreme (din st
anga p
artii ntregi si din dreapta p
artii
fractionare);
Trecerea b b k (b, k N
I b 2, k 1)
Regul
a:
- grup
am c
ate k cifre, de la virgul
a spre st
anga si spre dreapta, complet
and
eventual cu 0-uri grupurile extreme (pentru a avea grupuri de k cifre); aceste
0-uri se pun la st
anga n grupul aflat cel mai la st
anga al p
artii ntregi si la
dreapta n grupul aflat cel mai la dreapta al p
artii fractionare;
- nlocuim fiecare grup de k cifre ale bazei b cu c
ate o cifr
a a bazei b k .

baza b1 baza b2

Observatii:
- pentru a aplica regulile de mai nainte, este necesar s
a stim cele 2k
k
corespondente posibile ntre o cifr
a a bazei b si un grup de k cifre ale bazei b;
acestea se pot determina aplic
and trecerea prin baza 10 (baza bk baza 10
baza b) si se pot retine ntr-un tabel (cu 2k linii);
- explicatia intuitiv
a a acestor reguli este urm
atoarea: dac
a n scrierea
am c
ate
polinomial
a n puterile succesive ale lui b, cu coeficienti 0, b 1, grup
k termeni consecutivi si d
am factor comun puterea lui b cea mai mic
a, obtinem
o scriere polinomial
a n puterile succesive ale lui b k , cu coeficienti 0, b k 1;
din unicitatea acestor scrieri rezult
a c
a ele dau reprezent
arile n bazele b si b k .

baza b1 baza b2
Exemplu:

S
a se converteasc
a 1A.C 16 n baza 2 si 11011.1012 n baza 16.

Avem 16 = 24 , iar grupurile posibile de 4 cifre binare si cifrele hexa


corespunz
atoare reprezint
a numerele 0, 15 si sunt cuprinse n tabelul:
Zec
0
1
2
3

Bin
0000
0001
0010
0011

Hex
0
1
2
3

Zec
4
5
6
7

Bin
0100
0101
0110
0111

Hex
4
5
6
7

Zec
8
9
10
11

Bin
1000
1001
1010
1011

Hex
8
9
A
B

Zec
12
13
14
15

Bin
1100
1101
1110
1111

Atunci avem:
1A.C 16 |{z}
1 |{z}
A . |{z}
C 0001
00011010.1100

11010.112
| {z } 1010
| {z } . 1100
| {z }
11011.1012 |{z}
1 1011
101 0001
1 |{z}
B . |{z}
A 1B.A16
| {z } . |{z}
| {z } 1011
| {z } . 1010
| {z } |{z}

Hex
C
D
E
F

baza b1 baza b2

Observatie: metodele de mai sus nu se pot aplica pentru a trece direct din baza
8 n baza 16 sau invers, deoarece 16 este multiplu al lui 8, dar nu putere a lui
8. Putem ns
a proceda n doi pasi, trec
and prin baza 2, de exemplu:
baza 8 baza 2 baza 16

Operatii aritmetice ntr-o baza b

Operatiile aritmetice cu numerele scrise ntr-o baz


a b 2 oarecare se fac dup
a
reguli asem
an
atoare ca n baza 10, dar transportul si mprumutul trebuie s
a se
fac
a la b, nu la 10.
Pentru calculele de o cifr
a n baza b putem trece numerele n baza 10, facem
calculele acolo, apoi trecem rezultatele n baza b; ntruc
at toate calculele de o
cifr
a n baza b posibile sunt n num
ar de b 2 , este suficient s
a le facem pe toate
o singur
a dat
a si s
a retinem rezultatele ntr-o tabl
a a operatiei respective n
baza b.

Operatii aritmetice ntr-o baza b


Exemplu: In baza 2, sa se adune:

1011 + 110

Tabla adun
arii n baza 2 este:
+
0
1

0
0
1

1
1
10

De exemplu: 1 + 1 = 1 + 1 = 2 = 10.
Atunci, avem:
1 0 1 1 +
1 1 0
--------1 0 0 0 1
Pe pozitia unit
atilor am avut 1 + 0 = 1, f
ar
a transport; pe urm
atoarea pozitie
am avut 1 + 1 = 10 (adic
a num
arul 2), s-a p
astrat 0 si s-a propagat 1; pe
urm
atoarea pozitie am avut 0 + 1 + 1 (ultimul 1 provenit din transport) = 10,
s-a p
astrat 0 si s-a propagat 1; etc.

Operatii aritmetice ntr-o baza b

Exemplu: In baza 16, sa se scada:

BA - 9B

Avem:
B A 9 B
----1 F
Pe pozitia unit
atilor avem A B = 10 11 < 0; de aceea, mprumut
am 1 de
pe pozitia urm
atoare si atunci calculul este 1 16 + 10 11 = 15 = F . Pe
pozitia urm
atoare avem B 1 9 (acel 1 a fost cedat la mprumut)
= 11 1 9 = 1 = 1.

Operatii aritmetice ntr-o baza b


Exemplu: In baza 2, sa se nmulteasca:

110.11 x 1.001

Avem:
1 1 0.1 1 x
1.0 0 1
----------1 1 0 1 1
1 1 0 1 1
----------------1 1 1.1 0 0 1 1
Inmultirea ntr-o baz
a oarecare se face tot dup
a reguli asem
an
atoare ca n baza
10, dar pentru baza 2 aceste reguli se pot simplifica, deoarece singurele cifre
sunt 0 si 1, care desemneaz
a respectiv numerele 0 si 1, care sunt factor
anulator, respectiv element neutru, la nmultire; nmultirea cu un 0 presupune
scrierea unui r
and de 0-uri, care nu conteaz
a la adunare si se pot omite, iar
nmultirea cu un 1 revine la a scrie o copie a denmultitului; asadar, pentru a
face nmultirea, este suficient s
a parcurgem nmultitorul de la dreapta spre
st
anga si pentru fiecare 1 nt
alnit s
a mai scriem o copie a denmultitului, cu
cifra unit
atilor aliniat
a la acel 1, iar n final s
a adun
am r
andurile scrise - ceea ce
am f
acut mai sus; n final, num
arul de zecimale ale produsului este suma
numerelor de zecimale ale factorilor, la fel ca n cazul bazei 10.

Operatii aritmetice ntr-o baza b


Exemplu: In baza 2, sa se mparta:

10000.01 : 11

Avem:
1 0 0 0 0.0 1 | 1 1
1 1
|--------| 1 0 1.0 1(1 0)
= = 1 0 0
1 1
----= = 1 0 1
1 1
----= 1 0 0
1 1
----= = 1 0

Operatii aritmetice ntr-o baza b

C
and facem o mp
artire, trebuie s
a urm
arim dac
a c
atul rezult
a ca o fractie
zecimal
a finit
a sau se formeaz
a o perioad
a. Pentru aceasta, dup
a ce la
demp
artit am trecut de virgul
a si am cobor
at ultima cifr
a nenul
a, retinem
resturile succesive obtinute ntr-o list
a; dac
a la un moment dat un rest este 0,
ne oprim, a rezultat o fractie zecimal
a finit
a; dac
a la un moment dat un rest se
repet
a, ne oprim, a rezultat o fractie zecimal
a periodic
a, iar perioada ncepe cu
cifra generat
a la prima aparitie a restului care s-a repetat.
In exemplul nostru, dup
a ce la demp
artit am trecut de virgul
a si am cobor
at
ultima cifr
a nenul
a, am obtinut succesiv urm
atoarele resturi: 10, 1, 10
(repetitie).

Cuprins

1 Performata calculatoarelor
Conceptul de performant
a
M
asurarea performantei

2 Aritmetica sistemelor de calcul


Reprezentarea
Reprezentarea
Reprezentarea
Reprezentarea
Reprezentarea

numerelor n matematic
a
numerelor n calculator
numerelor naturale ca ntregi f
ar
a semn
numerelor ntregi n complement fat
a de 2
numerelor reale n virgul
a mobil
a

Reprezentarea n calculator
Fie M N
I , Z/, R
I o multime de numere pe care dorim s
a le reprezent
am n
calculator.
Consider
am o locatie de n biti: bn1 . . . b0 (de obicei n este multiplu de 8).
Not
am Cn = {cn1 . . . c0 |ci {0, 1}}, multimea configuratiilor de 0, 1 pe n
pozitii.
O reprezentare este o functie [.]n : M Cn bijectiv
a.
Observatii:
- M, n si [.]n trebuie alese a.. [.]n s
a fie bijectiv
a, deoarece noi reprezent
am
numerele n calculator, oper
am asupra lor cu calculatorul, dar la sf
arsit dorim s
a
putem interpreta rezultatul (s
a afl
am ce num
ar are reprezentarea respectiv
a),
ori aceasta nseamn
a s
a aplic
am [.]1
n ;
- [.]n nu poate fi (.)2 (reprezentarea binar
a folosit
a n matematic
a), deoarece
avem valori de biti pentru a desemna doar 0 si 1, nu si , ., etc.; deci, trebuie
facut
a o alt
a codificare;
- n plus, regula de reprezentare prin care este definit
a [.]n trebuie aleas
a a.. s
a
permit
a o implementare usoar
a si eficient
a a unor operatii hardware pe Cn prin
care s
a traducem operatiile aritmetice pe M.

Reprezentarea n calculator

Consider
am urm
atoarele operatii hardware la nivel de bit:
a
0
0
1
1

b
0
1
0
1

a|b (or)
0
1
1
1

a&b (and)
0
0
0
1

a b (xor)
0
1
1
0

a
0
1

a (not)
1
0

Reprezentarea n calculator
Pe Cn putem considera mai multe operatii hardware (lor le corespund
instructiuni n limbajul masin
a sau de asamblare), de exemplu:
- Operatii logice binare pe biti:
| (or),
& (and),
a
(xor), etc.; ele se efectueaz
aplic
and bit cu bit operatiile logice respective, conform tabelului anterior.
Exemplu (n = 8):

11000101
01000110
01000100


&

- Operatii aritmetice binare:


+ (adunare),
(sc
adere), etc.; ele se efectueaz
a
aplic
and algoritmii de calcul cu reprezent
arile binare ale numerelor naturale
folositi n matematic
a (ilustrati n sectiunea precedent
a); un transport din
pozitia bn1 se pierde, iar un mprumut cerut la aceast
a pozitie se primeste
automat (din afar
a).
11000101
+
00001011

01000110
01000110
00001011
11000101
(n primul caz am avut un transport din pozitia 7, care s-a pierdut, iar n al
doilea caz s-a cerut un mprumut la pozitia 6, cererea s-a transmis la pozitia 7,
unde mprumutul s-a primit automat din afar
a, iar c
and acesta s-a transmis
la pozitia 6, unde a fost generat
a cererea, a lasat n urm
a un 1 pe pozitia 7).
Exemplu (n = 8):

Reprezentarea n calculator

- operatii logice unare: 


a de 1),
 (complement fat
a de 2);
(complement fat

a neg
and fiecare bit ci , conform tabelului anterior;
cn1 . . . c0 se efectueaz

 cn1 . . . c0 se efectueaz
a neg
and fiecare bit ci si apoi adun
and 1 aritmetic (cu
eventuala propagare a transportului);
Exemplu (n = 8):

01001100
10110011

01001100
10110100

Observatie:
 cn1 . . . c0 se poate obtine mai simplu astfel:
- dac
a cn1 = . . . = c0 = 0, nu se schimb
a nimic;
- altfel, dac
a k = min{i {0, . . . n 1}|ci = 1}, atunci bitii cn1 , . . . , ck+1 se
neag
a iar bitii ck , . . . , c0 se las
a neschimbati.

Reprezentarea n calculator
Se constat
a c
a operatiile hardware pe Cn considerate nu sunt independente
logic (se pot exprima unele prin altele):
Teorem
a: Pentru orice , Cn avem:

=(
+1
)

=
+ (
 )=
+ (( 
+ 1)
)
(am notat prin 1 configuratia 0 . . . 01 Cn ).
Exemplu: ntr-un exemplu anterior am calculat c
a 00001011
01000110 =
11000101; s
a verific
am c
a obtinem acelasi rezultat si cu formula pentru
din
teorem
a:
Dac
a = 00001011 si = 01000110, atunci:

= 10111001
(
+ 1 = 10111001
+ 00000001 = 10111010
)

+ (( 

)

+
1)
=
00001011

+ 10111010 = 11000101

Reprezentarea n calculator

De aceea,
+ si
, desi exist
a ca instructiuni diferite n limbajul masin
a sau de
asamblare, intern sunt realizate cu un acelasi circuit, numit sumator.
La fel, exist
a instructiuni masin
a pentru aplicarea algoritmilor de nmultire si
mp
artire, care intern sunt realizate prin combinatii de aceleasi c
ateva circuite
simple (de exemplu, nmultirea = adunare repetat
a, mp
artirea = sc
adere
repetat
a).
Operatiile din limbajele de nivel nalt sunt traduse de compilator prin
combinatii de operatii implementate hardware. Cu c
at limbajul este de nivel
mai jos (i.e. mai apropiat de hardware), cu at
at combinatia este mai simpl
a.
De exemplu, n limbajul C exist
a operatorii |, &, ^, ..., iar ei pot fi tradusi prin
c
ate o singur
a operatie
|,
&,
, ... (de aceea am notat asa).

Reprezentarea n calculator

In continuare, vom studia algoritmii de reprezentare [.]n pentru diverse tipuri de


numere.
Pentru un num
ar oarecare x, vom nota (x)n2 reprezentarea lui x n baza 2
folosit
a n matematic
a (a se vedea sectiunea anterioar
a), completat
a cu cifre
semnificative 0 p
an
a la n pozitii.

Cuprins

1 Performata calculatoarelor
Conceptul de performant
a
M
asurarea performantei

2 Aritmetica sistemelor de calcul


Reprezentarea
Reprezentarea
Reprezentarea
Reprezentarea
Reprezentarea

numerelor n matematic
a
numerelor n calculator
numerelor naturale ca ntregi f
ar
a semn
numerelor ntregi n complement fat
a de 2
numerelor reale n virgul
a mobil
a

Reprezentarea ca ntreg fara semn


In limbajul C, reprezentarea ca ntreg f
ar
a semn se foloseste n cazul tipurilor
ntregi nsotite de unsigned:
unsigned char, unsigned short, unsigned int,
unsigned long, unsigned long long
Reprezentarea ca ntreg f
ar
a semn pe n pozitii se defineste astfel:
M := {0, . . . , 2n 1} N
I
[.]n := [.]un : {0, . . . , 2n 1} Cn , [x]un = (x)n2 .

Exemplu: In limbajul C (versiunea compilatorului TC++ 1.00) avem:


unsigned short x, y, z;
/* n = 16, M = {0, . . . , 65535} */
scanf{"%hu%hu", &x, &y};
/* aplic
a [.]u16 */
z = x + y;
/* compilatorul traduce + prin
+ */
printf{"%hu", z};
/* aplic
a [.]u16 1 */

Reprezentarea ca ntreg fara semn

Din modul cum se fac operatiile implementate hardware discutat mai devreme,
rezult
a c
a operatiile cu numerele naturale reprezentate astfel se fac mod 2n ,
mai exact:
Teorem
a:
u u 1
Dac
a op = +, , . . . atunci: [[x]un
op [y ]n ]n
= (x op y ) mod 2n
(mod 2n se calculeaz
a a.. s
a produc
a un rezultat {0, . . . , 2n 1}).
u u 1
In particular, dac
a x op y M, atunci: [[x]un
op [y ]n ]n
= x op y .
Asadar, dac
a reprezent
am x si y si aplic
am
op din calculator, obt
inem
reprezentarea lui x op y din matematic
a modulo 2n ; dac
a nu avem dep
asire,
este chiar x op y din matematic
a.

Reprezentarea ca ntreg fara semn

In particular, vom avea:


Dac
a x, y , x y M, atunci: [[x]un
[y ]un ]un 1 = x y ,
u
adic
a: [[x]n
+ (
[y ]un )]un 1 = x y
sau: [[x]n
+ ((
+ 1)]1
n = x y
[y ]n )
De asemenea, vom avea:
Dac
a x M, atunci: [
[x]un ]un 1 = x + 2n ,
u
adic
a: [(
+ 1]un 1 = x + 2n .
[x]n )

Reprezentarea ca ntreg fara semn


Exemplu: In limbajul C consideram declaratiile:
unsigned char x,y,z;

/* n = 8, M = {0, ..., 255} */

1) Secventa de cod: x = 200; y = 200; z = x + y; printf("%d",z);


afisaz
a: 144
400
-------------------|
0
| 255
----[----------][----------]--0
255|
|
-------144

<-----|
0 [----------] 255
|
------>

Intuitiv, ne imagin
am c
a intervalul [0,...,255] se multiplic
a de-a lungul axei
reale, determin
am punctul aflat la distanta 400 de origine, apoi m
asur
am
deplasamentul acestui punct fat
a de nceputul intervalului n care se afl
a,
obtin
and rezultatul 144 (desenul din st
anga).
Sau, ne imagin
am c
a valoarea 400 se nf
asoar
a parcurg
and circular intervalul
[0,...,255] si ce r
am
ane n interval este rezultatul 144 (desenul din dreapta).

Reprezentarea ca ntreg fara semn

2) Secventa de cod: x = 255; ++x; face ca x s


a devin
a0
Secventa de cod: x = 0; --x; face ca x s
a devin
a 255
3) Secventa de cod: for(x = 0; x < 256; ++x); este un ciclu infinit.
Intr-adev
ar, x primeste succesiv valorile 0, 1, 2, ..., 255, 0, 1, ..., deci vom
avea mereu x < 256.
De notat c
a la efectuarea testului x < 256 operanzii sunt convertiti la tipul
int, iar comparatia se face n cadrul tipului int.

Cuprins

1 Performata calculatoarelor
Conceptul de performant
a
M
asurarea performantei

2 Aritmetica sistemelor de calcul


Reprezentarea
Reprezentarea
Reprezentarea
Reprezentarea
Reprezentarea

numerelor n matematic
a
numerelor n calculator
numerelor naturale ca ntregi f
ar
a semn
numerelor ntregi n complement fat
a de 2
numerelor reale n virgul
a mobil
a

Reprezentarea n complement fata de 2

In limbajul C, reprezentarea n complement fat


a de 2 se foloseste n cazul
tipurilor ntregi ne-nsotite de unsigned:
char, signed char, short, signed short, int, signed int,
long, signed long, long long, signed long long
Reprezentarea n complement fat
a de 2 pe n pozitii se defineste astfel:
M := {2n1 , . . . , 2n1 1} Z/
(x)n2 ,
(2 + x)n2 ,
(aceast
a functie s.n.codul complementar fat
a de 2).

[.]n :=

[.]sn

: {2

n1

,...,2

n1

1} Cn ,

[x]sn

x 0
x <0

Observatie: compact, putem scrie: x M, [x]sn = ((2n + x) mod 2n )n2 .

Reprezentarea n complement fata de 2


Exemplu: In limbajul C, pentru tipul char avem:

n = 8,

M = {128, . . . , 127}.
Ilustr
am modul de reprezentare a c
atorva valori:
127:
126:
...
1:
0:
-1:
-2:
...
-127:
-128:

01111111 = (127)n2
01111110 = (126)n2

-128
-1 0
127
--[-------][-------]-\
\
|
\
|\
|
\
| \
|
n
00000001 = (1)2
\
| \
|
\
|
\
|
00000000 = (0)n2
\
|
\
|
11111111 = (255)n2 = (256 1)n2
\ |
\ |
n
n
\|
\|
11111110 = (254)2 = (256 2)2
\
\
|\
|\
n
n
| \
| \
10000001 = (129)2 = (256 127)2
| \
| \
n
n
|
\
|
\
10000000 = (128)2 = (256 128)2
|
\ |
\
|
\ |
\
Deci, intervalul {0, . . . , 127} este l
asat pe loc, intervalul
|
\|
\
|
\
\
{128, . . . , 1} este mapat n intervalul {128, . . . , 255},
|
|\
\
apoi numerele naturale rezultate sunt reprezentate ca ntregi --[-------][-------]-0
127 128
255
f
ar
a semn.

Reprezentarea n complement fata de 2


Operatiile aritmetice se fac tot mod 2n , dar translatat (deplasamentul se
m
asoar
a fat
a de nceputul intervalului {2n1 , . . . , 2n1 1}).

Exemplu: In limbajul C, avem:


char x, y, z;
/* n = 8, M = {-128, ..., 127} */
x = -100; y = -100; z = x + y;
printf("%d", (int)z); /* afisaza: 56 */
distanta 184
distanta 184
------------------------------------|
v
|
v
--[------------|----|-------][------------|----|-------]--384
-200^
-129 -128
0
56
127
| suma matematica 200 |
-----------------------

Ne putem imagina c
a intervalul {128, . . . , 127} este parcurs circular:
<-----------|
[------------|------------]
-128|
0
|127
------------->

In particular: 128 1 produce 127, 127 + 1 produce 128.

Reprezentarea n complement fata de 2

Teorem
a:
(1) Dac
a [x]sn = cn1 . . . c0 , atunci: x 0 cn1 = 0
(cn1 s.n. bitul de semn)
s
(2) Dac
a x, x M, atunci [x]sn =
[x]sn = (
+1
[x]n )
s
s
s
(3) Dac
a x, y , x y M, atunci [x y ]n = [x]n
+(
[y ]sn ) = [x]sn
+((
+1)
[y ]n )

(4) Dac
a x {2p1 , 2p1 1}, [x]sp = cp1 . . . c0 si p < q, atunci:
[x]sq = cp1 . . . cp1 cp1 . . . c0 (se extinde bitul de semn).
{z
}
|
q p ori

Reprezentarea n complement fata de 2


Exemplu:

Fie x = 32, y = 41. Calculati z = x y folosind reprezentarea n


complement fat
a de 2 pe 8 biti.
Avem n = 8, deci M = {128, . . . , 127}.
Deoarece x, y 0, avem [x]s8 = (x)82 , [y ]s8 = (y )82 .
Pentru (x)82 observ
am c
a 32 = 25 , iar pentru (y )82 aplic
am regula de conversie
baza 10 baza 2 din prima sectiune: 41 | 1
20 | 0
Atunci:
10 | 0
s
[y ]8 = 00101001
5 | 1
s

[y
]
=
11010110
s8
2 | 0
1
+(
[y ]8 s) = 11010111
1 | 1
[x]8 = 00100000
0 |
s
x
+(1
+(
[y ]8 )) = 11110111
8
Avem 11110111 = (247)2 (aplic
and regulile de conversie baza 2 baza 10 din
prima sectiune) = [z]s8 ; deoarece bitul 7 (de semn) din [z]s8 este 1, nseamn
a c
a
z < 0, deci [z]s8 s-a obtinut cu al doilea caz al definitiei; asadar
[z]s8 = (256 + z)82 = (247)82 , de unde (aplic
and inversa functiei (.)82 ) rezult
a c
a
256 + z = 247, adic
a z = 9.
Putem verifica, efectu
and sc
aderea n baza 10, c
a 32 41 = 9.

Reprezentarea n complement fata de 2

s
Observatie: Dac
a efectu
am
[x]sn , adic
a (
+1, pentru x = 2n1 , vom
[x]n )
obtine tot [x]sn , ceea ce, cu punctul (2) din teorema anterioar
a, pare s
a nsemne
c
a (2n1 ) = 2n1 (deoarece au aceeasi reprezentare).

De exemplu, pentru n = 8 vom obtine c


a (128) = 128.
Intr-adev
ar, avem succesiv:

+1
01111111
[128]s = 10000000
10000000 = [128]s .
8

Totusi, nu exist
a nici o contradictie aritmetic
a sau cu bijectivitatea lui [.]sn ,
deoarece formula de la punctul (2) din teorema anterioar
a se aplic
a doar dac
a
x, x M, iar n acest caz x 6 M.

Reprezentarea n complement fata de 2


Exemplu: In limbajul C (TC++ 1.00) consideram secventa de cod:
char x; /*
short y; /*
x = -127;/*
y = x;
/*

p = 8 */
q = 16 */
se reprezinta -127 ca intreg cu semn pe 8 biti */
se extinde reprezentarea din x de la 8 biti la 16 biti,
prin propagarea bitului de semn */

Verificati c
a valoarea reprezentat
a n y este tot 127 (punctul (4) din teorema
anterioar
a).
Avem: [127]s8 = (256 127)82 (deoarece 127 < 0) = (129)82 = 10000001.
Prin propagarea bitului de semn la 16 biti, obtinem: 1111111110000001 =
16
16
((216 1) (27 1) + 1)16
2 = (65535 127 + 1)2 = (65409)2
Aceasta este reprezentarea ca ntreg cu semn a unui num
ar z < 0, deoarece
bitul 15 (de semn) este 1.
16
Atunci [z]s16 = (65536 + z)16
2 = (65409)2 , deci 65536 + z = 65409, deci
z = 127.

Cuprins

1 Performata calculatoarelor
Conceptul de performant
a
M
asurarea performantei

2 Aritmetica sistemelor de calcul


Reprezentarea
Reprezentarea
Reprezentarea
Reprezentarea
Reprezentarea

numerelor n matematic
a
numerelor n calculator
numerelor naturale ca ntregi f
ar
a semn
numerelor ntregi n complement fat
a de 2
numerelor reale n virgul
a mobil
a

Notatia stiintifica

Notatia stiintific
a si aritmetica sistemelor de calcul n virgula mobil
a folosesc
un mod de reprezentare a unei aproximatii a unui num
ar real care s
a suporte un
domeniu larg de valori. Numerele sunt, n general, reprezentate aproximativ
printr-o valoare cu un num
ar fixat de cifre semnificative care este scalat
a cu
ajutorul unui exponent:

a be
a este mantisa (engl: mantissa, significand, coefficient), b este baza de
enumeratie n care sunt scrise numerele si baza scal
arii (de obicei 2, 10 sau 16),
e este exponentul; semnul + se poate omite.

Notatia stiintifica
Scalarea cu ajutorul exponentului permite acoperirea unui domeniu larg de
valori, at
at foarte mici c
at si foarte mari, cu aceeasi precizie relativ
a. De
exemplu cu 9 cifre semnificative putem descrie, n functie de exponentii folositi,
at
at distante n astronomie cu precizie de 1 an lumin
a, c
at si distante n fizica
atomic
a cu precizie de 1 femtometru (1015 metri) - ambele precizii fiind
acceptabile n domeniul respectiv.
Faptul c
a se retine un num
ar fix de cifre pentru mantis
a si exponent face ca
multimea numerelor reale reprezentabile s
a fie de fapt o multime finit
a de
numere rationale, dintr-un interval fixat.
Mai mult, folosirea scal
arii face ca aceste numere s
a nu fie uniform spatiate n
intervalul respectiv: valorile mici, apropiate de 0, sunt reprezentate cu pasi mici
(ex. 1 femtometru), n timp ce valorile mari, apropiate de extremele
intervalului, sunt reprezentate cu pasi mari (ex. 1 an lumin
a).
Denumirea de virgul
a mobil
a se refer
a la faptul c
a virgula (engl: radix point),
numit
a n functie de baz
a si virgul
a zecimal
a (engl: decimal point), virgul
a
binar
a (engl: binary point), etc., poate fi mutat
a oriunde n raport cu cifrele
semnificative, modific
and corespunz
ator exponentul:

0.123 102 = 1.230 101 = 12.30 100 = 123.0 101

Notatia stiintifica

In informatic
a, termenul de virgul
a mobil
a (engl: floating point) denumeste
aritmetica sistemelor de calcul ce foloseste reprezent
ari ale numerelor pentru
care virgula binar
a nu este fixat
a.
O reprezentare n virgul
a mobil
a este notatie stiintific
a dac
a are o singur
a cifr
a
n st
anga virgulei si este notatie stiintific
a normalizat
a dac
a n plus acea cifr
a
este nenul
a (i.e nu are 0-uri la nceput).

1.230 101 este n notatie stiintifica normalizata, dar


0.123 102 , 12.30 100 , 123.0 101 nu sunt.
De exemplu

Constat
am c
a notatia stiintific
a normalizat
a pentru un num
ar real nenul este
unic
a.

Formatul intern n virgula mobila


Reprezentarea n calculator a numerelor reale n virgul
a mobil
a este
reglementat
a prin standardul IEEE 754, adoptat initial n 1985 (IEEE
754-1985) si reactualizat n 2008 (IEEE 754-2008). Mai nou, este folosit
standardul ISO/IEC/IEEE 60559:2011.
Pentru reprezentare (formatul intern) se aleg dou
a dimensiuni n si k ,
2 k n 2 si se folosesc locatii de n biti bn1 . . .
compuse din urm
atoarele c
ampuri:
bn1 (1 bit, cel mai semnificativ): semnul;

b0

bn2 . . . bnk1 (urmatorii k biti): caracteristica;


bnk2 . . . b0 (ultimii nk1 biti, cei mai putin semnificativi): fractia:

bn1 bn2 . . . bnk1 bnk2 . . . b0


|{z}
|
{z
}|
{z
}

semn (1 bit) caracteristic


a (k biti)

fractie (n k 1 biti)

Formatul intern n virgula mobila


Multimea valorilor reprezentabile n acest format este specificat
a prin
intermediul a trei parametri ntregi (baza de enumeratie si de scalare este
ntotdeauna 2):
p = n k : num
arul de cifre ale mantisei (precizia);

Emin = 2k1 + 2: exponentul minim;


k1
Emax = 2
1: exponentul maxim.

Pentru numerele reale nenule reprezentabile, exponentul E trebuie sa se afle n


intervalul de numere ntregi Emin E Emax , dar se doreste
reprezentarea lui ca ntreg f
ar
a semn, nu prin complement fat
a de doi; de
aceea, se mai consider
a parametrul:

k1

bias = 2
iar n c
ampul de

1: bias (sau polarizare);

k biti se reprezinta, ca ntreg fara semn, valoarea


c = E + bias (avem 1 c 2k 2); aceasta s.n.
caracteristic
a (sau exponent biasat sau exponent polarizat).

Formatul intern n virgula mobila


Constat
am c
a n c
ampul caracteristic
a al formatului pot fi stocate si valorile

c = 0 (reprezentata cu toti bitii 0) si c = 2k 1 (reprezentata cu toti


bitii 1), care nu pot fi produse de expresiile E + bias ; ele sunt folosite
pentru a codifica valori speciale, ca 0, , numere denormalizate
mici, valori invalide NaN (Not A Number).
In ceea ce priveste mantisa, numerele vor fi mai nt
ai scalate a.. mantisa s
a
aib
a n st
anga virgulei doar o cifr
a (1 n cazul numerelor normalizate si 0 n
cazul numerelor denormalizate), iar n ultimii n k 1 biti ai formatului
va fi stocat
a fractia, care este partea mantisei din dreapta virgulei (cifra din
st
anga put
andu-se deduce din context). In unele texte, prin mantis
a este
denumit
a de fapt fractia.
Se mai spune c
a aceast
a reprezentare este semn si modul (engl: sign and
magnitude) deoarece semnul are un bit separat de restul num
arului.

Formatul intern n virgula mobila


Valorile reprezentabile n formatul specificat de

n si k (sau de p , Emin ,

Emax ) si modul lor de reprezentare (codare) sunt urmatoarele:


Numerele de forma

(1)s 2E 1.c1 . . . cp1 2 , unde

s {0, 1},
Emin E Emax este un numar ntreg,
c1 , . . . , cp1 {0, 1}
(numere reale nenule normalizate).
Ele sunt reprezentate astfel:
bn1 = s , semnul;

bn2 . . . bnk1 = E + bias , exponentul biasat,


reprezentat ca ntreg f
ar
a semn; sirul de biti prin care se reprezint
a variaz
a

0 . . . 01 (valoarea 1) la 1 . . . 10 (valoarea 2k 2);


bnk2 . . . b0 = c1 . . . cp1 , fractia (se omite deci c0 = 1).
de la

Formatul intern n virgula mobila

Numerele de forma

(1)s 2Emin 0.c1 . . . cp1 2 , unde

s {0, 1},
c1 , . . . , cp1 {0, 1} si cel putin unul dintre ci

este

(numere reale nenule denormalizate mici).


Ele sunt reprezentate astfel:
bn1 = s , semnul;

bn2 . . . bnk1 = 0, reprezentat prin sirul de biti 0 . . . 0;


bnk2 . . . b0 = c1 . . . cp1 , fractia (se omite deci c0 = 0).

Formatul intern n virgula mobila


Numerele de forma

0 = (1)s 2Emin 0.0 . . . 02 , unde

s {0, 1}.
Ele sunt reprezentate astfel:
bn1 = s , semnul;

bn2 . . . bnk1 = 0, reprezentat prin sirul de biti 0 . . . 0;


bnk2 . . . b0 = 0 . . . 0, fractia.
Not
am c
a numerele de forma 0 se reprezin
a cu toti bitii 0, mai putin
eventual bitul de semn bn1 .
Desi reprezent
arile lui +0 si 0 sunt diferite (prin bitul de semn), semnul
are relevant
a n anumite circumstante, cum ar fi mp
artirea la 0 (mp
artirea
1.0/ + 0 produce +, mpartirea 1.0/ 0 produce ), iar n
altele nu.

Formatul intern n virgula mobila


Valorile

Ele sunt reprezentate astfel:


bn1 = s , semnul (0 =

+, 1 = );
bn2 . . . bnk1 = 2 1, reprezentat prin sirul de biti 1 . . . 1;
bnk2 . . . b0 = 0 . . . 0, fractia nula.
k

Valori NaN (Not A Number) - sunt entit


ati simbolice codificate n format
de virgul
a mobil
a ce semnific
a ideea de valoare invalid
a.
Ele sunt reprezentate astfel:
bn1 este oarecare;

bn2 . . . bnk1 = 2k 1, reprezentat prin sirul de biti 1 . . . 1;


bnk2 . . . b0 este o fractie nenula (cel putin unul dintre
bnk2 , . . . , b0 este 1).

Formatul intern n virgula mobila


NaN :
Signaling NaN (sNaN ): semnaleaza (declansaza) exceptia de

Exist
a dou
a feluri de

operatie invalid
a de fiecare dat
a c
and apare ca operand ntr-o operatie;
manifestarea exceptiei poate diferi de la o implementare la alta si poate fi de
ignorare sau poate consta n setarea unor flag-uri si/sau executarea unui trap
(ntrerupere) care lanseaz
a o rutin
a ce primeste NaN -ul ca parametru;

Quiet NaN (qNaN ): se propaga prin aproape toate operatiile


aritmetice f
ar
a a semnala (declansa) exceptii, iar rezultatul operatiilor va fi tot
un qNaN , anume unul dintre qNaN -urile date ca operand; ele sunt utile
atunci c
and nu vrem s
a detect
am/trat
am o eroare chiar la momentul aparitiei
ei ci la un moment ulterior.
Standardul IEEE 754 cere a fi implementat cel putin un sNaN si cel putin un
qNaN ; bitul de semn si bitii de fractie pot diferi de la o implementare la alta
- de exemplu n ei se poate codifica motivul erorii (n cazul sNaN -urilor el va
fi transmis astfel rutinei de tratare a exceptiei, iar n cazul qNaN -urilor el se
va propaga prin operatiile aritmetice p
an
a la locul trat
arii).

Formatul intern n virgula mobila


Aplic
and invers regulile de mai sus, putem determinara valoarea v reprezentat
a
printr-un sir de biti bn1 . . . b0 n formatul specificat de n si k . Not
am:
s = numarul 0 sau 1 stocat n bitul bn1 (semnul);
c = numarul natural reprezentat ca ntreg fara semn n bitii
bn2 . . . bnk1 (caracteristica);
f = sirul de p 1 cifre binare stocat n bitii bnk2 . . . b0 (fractia).
k
Dac
a c = 2 1 (reprezentat ca 1 . . . 1) si f 6= 0 . . . 0, atunci
v este un NaN (indiferent de s ).
k
Dac
a c = 2 1 (reprezentat ca 1 . . . 1) si f = 0 . . . 0, atunci
s
v = (1) .
k
Dac
a 0 < c < 2 1, atunci
s
c2k1 +1
v = (1) 2
1.f 2 (numar nenul normalizat).
Dac
a c = 0 (reprezentat ca 0 . . . 0) si f 6= 0 . . . 0, atunci
k1
v = (1)s 22 +2 0.f 2 (numar nenul denormalizat).
Dac
a c = 0 (reprezentat ca 0 . . . 0) si f = 0 . . . 0, atunci
v = (1)s 0 (zero).

Formatul intern n virgula mobila


Din aceste reguli deducem c
a multimea numerelor reprezentabile este inclus
a n
intervalul:

k1

[22

n+k

(2nk 1), +22

k1

n+k

(2nk 1)]

Nu toate numerele reale din acest interval pot fi ns


a reprezentate, deoarece se
retin doar un numar finit de zecimale n baza 2. Numerele sunt reprezentate cu
un anumit pas, care creste cu c
at ne apropiem de capetele intervalului.
Operatiile aritmetice n virgul
a mobil
a rotunjesc (si deci altereaz
a) rezultatul
a.. s
a fie una dintre valorile reprezentabile. De aceea, pasul reprezent
arii
influienteaz
a precizia calculelor.
Intruc
at multimea valorilor reprezentabile este simetric
a fat
a de 0 (dac
a un
num
ar x este reprezentabil, atunci si x este reprezentabil, reprezentarea
diferind doar n bitul de semn), vom analiza doar intervalul:

[0, 22

k1

n+k

(2nk 1)]

Formatul intern n virgula mobila


Cel mai mic num
ar nenul reprezentabil este:
k1

22

+2

|0.0 .{z
. . 01}2 = 22

k1

n+k+3

n k cifre ale mantisei

reprezentat:

0 0| .{z
. . 0} 0| . .{z. 0 1}
|{z}

s (1 bit) c (k biti) f(n k 1 biti)


Cel mai mare num
ar nenul reprezentabil este:
k1

22

1.1
. . . 1}2 = 22
| {z

k1

n+k

(2nk 1),

n k cifre ale mantisei

reprezentat:

0 1| . .{z. 1 0} 1| .{z
. . 1}
|{z}

s (1 bit) c (k biti) f(n k 1 biti)

Formatul intern n virgula mobila


k1

Numerele din intervalul


reprezentate.
Numerele din intervalul
reprezentate cu pasul
Pentru orice

[2 , 2

i+1

(0, 22
[22
k1

k1

n+k+3

n+k+3

n+k+3

sunt prea mici pentru a fi

k1

, 22

+3

sunt

i 2k1 + 3, 2k1 2, numerele din intervalul


] sunt reprezentate cu pasul 2in+k+1 .
k1

k1

[22 1 , 22
2k1 n+k
sunt reprezentate cu pasul 2
.

Numerele din intervalul

n+k

(2nk 1)]

Formatul intern n virgula mobila


Ilustrare grafica:
0 0
. . 0} 0
. . 0} = 0
|{z}
| .{z
| .{z
s(1) c(k)
f(n-k-1)

...

(numere nereprezentabile)
k1
2k1 +2
0.0 . . . 012 = 22 +2 2n+k+1
0
. . 0} 0
| . .{z. 0 1} = 2
|{z} 0
| .{z
k1

s(1) c(k)
f(n-k-1)
= 22
(cel mai mic num
ar nenul reprezentabil)

...

n+k+3

k1

pas 22 n+k+3
k1
. . 1} = 22 +2 0.1 . . . 12
0 0
. . 0} 1
| .{z
|{z}
| .{z
s(1)

c(k)

f(n-k-1)

k1

= 22 +2 (2nk1 1) 2n+k+1
k1
= 22 n+k+3 (2nk1 1)

k1

pas 22 n+k+3
k1
. . 0} = 22 +2 1.0 . . . 02
0 0
. 0 1} 0
| .{z
|{z}
| . .{z
s(1) c(k)
f(n-k-1)

...

k1

pas 22

n+k+3

= 22

k1

+2

Formatul intern n virgula mobila


0 0
. 0 1} 1
. . 1} = 22
|{z}
| . .{z
| .{z
s(1)

c(k)

f(n-k-1)

k1

+2

1.1 . . . 12

2k1 +2

=2
(2nk 1) 2n+k+1
2k1 n+k+3
=2
(2nk 1)

k1

pas 22 n+k+3
k1
k1
. . 0} = 22 +2 10.0 . . . 02 = 22 +3 1.0 . . . 02
0 0
| .{z
|{z}
| . . .{z0 1 0} 0
s(1)

...

c(k)

f(n-k-1)

= 22

k1

+3

k1

pas 22 n+k+4
k1
0 0
. . 1} = 22 +3 1.1 . . . 12
| .{z
|{z}
| . . .{z0 1 0} 1
s(1)

c(k)

f(n-k-1)

k1

= 22 +3 (2nk 1) 2n+k+1
k1
= 22 n+k+4 (2nk 1)

k1

pas 22 n+k+4
k1
k1
0 0
. . 0} = 22 +3 10.0 . . . 02 = 22 +4 1.0 . . . 02
|{z}
| . . .{z0 1 1} 0
| .{z
s(1)

c(k)

f(n-k-1)

= 22

k1

+4

Formatul intern n virgula mobila

...
k1

0 1
. . 0} = 22
|{z}
| . . .{z1 0 1} 0
| .{z
s(1)
c(k)
f(n-k-1)

...

1.0 . . . 02

k1

= 22

k1

pas 22 n+k1
k1
k1
. . 1} = 22 2 1.1 . . . 12 = 22 2 (2nk 1)2n+k+1
0 1
|{z}
| . . .{z1 0 1} 1
| .{z
k1

s(1)
c(k)
f(n-k-1)
= 22 n+k1 (2nk 1)
2k1 n+k1
pas 2
k1
k1
k1
0 1
. 1 0} 0
. . 0} = 22 2 10.0 . . . 02 = 22 1 1.0 . . . 02 = 22 1
|{z}
| . .{z
| .{z

s(1)

...

c(k)

f(n-k-1)

k1

pas 22 n+k
k1
k1
0 1
. 1 0} 1
. . 1} = 22 1 1.1 . . . 12 = 22 1 (2nk 1) 2n+k+1
| .{z
|{z}
| . .{z
k1

s(1) c(k)
f(n-k-1)
= 22 n+k (2nk 1)
(cel mai mare num
ar nenul reprezentabil)

Formatul intern n virgula mobila


Observatie:
Proiectantii standardului IEEE 754 au dorit o reprezentare a virgulei mobile
care s
a poat
a fi prelucrat
a usor de comparatiile pentru ntregi, n special pentru
sortare.
Plasarea semnului n bitul cel mai semnificativ permite efectuarea rapid
aa
testelor < 0, > 0, = 0.
Plasarea caracteristicii naintea fractiei si faptul c
a ea este un num
ar natural
(indiferent dac
a exponentul este pozitiv sau negativ) ce creste odat
a cu
exponentul permite sortarea numerelor n virgul
a mobil
a cu ajutorul circuitelor
de comparare pentru ntregi, deoareace numerele cu exponenti mai mari par
mai mari dec
at numerele cu exponenti mai mici.
Asadar, reprezentarea IEEE 754 poate fi prelucrat
a cu ajutorul circuitelor de
comparare pentru ntregi, acceler
and sortarea numerelor n virgul
a mobil
a.
Dealtfel, pe ilustrarea grafic
a de mai nainte se poate observa c
a sirurile de biti
cresc n ordine lexicografic
a odat
a cu cresterea numerelor reale reprezentate,
ceea ce corespunde cresterii interpret
arilor acestor siruri ca ntregi f
ar
a semn.

Formatul intern n virgula mobila

Pe aceeasi ilustrare grafic


a se mai poate constata c
a succesorul lexicografic al
sirului de biti prin care s-a reprezentat cel mai mare num
ar nenul reprezentabil:

0 |1 . .{z
. 1 0} 1| .{z
. . 1}
|{z}
s(1)

c(k)

f(n-k-1)

este sirul de biti prin care se reprezint


a

+:

. . 0}
0 1| .{z
. . 1} 0| .{z
|{z}
s(1)

c(k)

f(n-k-1)

ceea ce exprim
a ideea c
a

+ > orice numar.

Formatele single si double


Proiectarea unui sistem de reprezentare n virgul
a mobil
a presupune o bun
a
alegere a valorilor n (dimensiunea formatului), k (dimensiunea c
ampului
caracteristic
a) si p 1 (dimensiunea c
ampului fractie). Reamintim c
ap
este num
arul de cifre semnificative considerate (prima este implicit
a, restul sunt
stocate n c
ampul fractie). Avem

n = 1 + k + (p 1) = k + p .

In general n este un multiplu al dimensiunii cuv


antului de memorie (word) (ex:
32 biti, 64 biti) si atunci pentru k si p trebuie g
asit un compromis, deoarece
un bit ad
augat la unul dintre c
ampuri trebuie luat de la cel
alalt.
Cresterea lui p determin
a cresterea preciziei numerelor, n timp ce cresterea lui

k determina largirea domeniului de numere care pot fi reprezentate.


Principiile de proiectare ale seturilor de instructiuni hardware ne nvat
a c
ao
proiectare bun
a are nevoie de compromisuri bune.
Dou
a formate n virgul
a mobil
a descrise n standardul IEEE 754, care se g
aseste
practic n orice calculator conceput dupa anul 1980, sunt single si double.

Formatele single si double


Formatul single (precizie simpla): n = 32, k = 8, p = 24

Emin = 126, Emax = 127, bias = 127


104
Intervalul de numere 0 reprezentabile este: [0, 2
(224 1)]

Rezult
a:

Cel mai mic num


ar nenul reprezentabil este:

2126 0.0
. . 01}2 = 2149 ,
| .{z
24 cifre ale mantisei

reprezentat:

0 0| .{z
. . 0} 0| . .{z. 0 1}
|{z}

s (1 bit) c (8 biti) f(23 biti)


Cel mai mare num
ar nenul reprezentabil este:

2127 1.1
. . . 1}2 = 2104 (224 1),
| {z
24 cifre ale mantisei

reprezentat:

0 1| . .{z. 1 0} 1| .{z
. . 1}
|{z}

s (1 bit) c (8 biti) f(23 biti)

Formatele single si double

Numerele din intervalul


reprezentate.
Numerele din intervalul

149

(0, 2149 )

sunt prea mici pentru a fi

[2149 , 2125 ]

sunt reprezentate cu pasul

i 125, 126, numerele din intervalul [2i , 2i+1 ]


i23
sunt reprezentate cu pasul 2
.
127
Numerele din intervalul [2
, 2104 (224 1)] sunt reprezentate
104
cu pasul 2
.

Pentru orice

Formatele single si double


Ilustrare grafica:
. . 0} = 0
0 0
. . 0} 0
| .{z
|{z}
| .{z
s(1) c(8)
f(23)

...

(numere nereprezentabile)

126
0 0
. . 0} 0
0.0 . . . 012
|{z}
| .{z
| . .{z. 0 1} = 2
s(1) c(8)
f(23)
(cel mai mic num
ar nenul reprezentabil)

...

= 2126 223

= 2149

pas 2149

. . 1} = 2126 0.1 . . . 12 = 2126 (223 1) 223


0 0
. . 0} 1
| .{z
|{z}
| .{z
s(1) c(8)
f(23)
= 2149 (223 1)
pas 2149
. . 0} = 2126 1.0 . . . 02
0 0
. 0 1} 0
| .{z
|{z}
| . .{z
s(1) c(8)
f(23)

...

pas 2149

= 2126

Formatele single si double


0 0
. 0 1} 1
. . 1} = 2126 1.1 . . . 12 = 2126 (224 1) 223
|{z}
| . .{z
| .{z
s(1) c(8)
f(23)
= 2149 (224 1)
pas 2149
. . 0} = 2126 10.0 . . . 02 = 2125 1.0 . . . 02 = 2125
0 0
| .{z
|{z}
| . . .{z0 1 0} 0
s(1) c(8)
f(23)

...

pas 2148

0 0
. . 1} = 2125 1.1 . . . 12 = 2125 (224 1) 223
|{z}
| . . .{z0 1 0} 1
| .{z
s(1) c(8)
f(23)
= 2148 (224 1)
pas 2148
. . 0} = 2125 10.0 . . . 02 = 2124 1.0 . . . 02 = 2124
0 0
| .{z
|{z}
| . . .{z0 1 1} 0
s(1) c(8)
f(23)

Formatele single si double

...
0 1
. . 0} = 2126 1.0 . . . 02
|{z}
| . . .{z1 0 1} 0
| .{z
s(1)
c(8)
f(23)

...

= 2126

pas 2103

. . 1} = 2126 1.1 . . . 12 = 2126 (224 1) 223


0 1
| .{z
|{z}
| . . .{z1 0 1} 1
s(1)
c(8)
f(23)
= 2103 (224 1)
pas 2103
0 1
. 1 0} 0
. . 0} = 2126 10.0 . . . 02
|{z}
| . .{z
| .{z
s(1)
c(8)
f(23)

...

= 2127 1.0 . . . 02

= 2127

pas 2104

0 1
. 1 0} 1
. . 1} = 2127 1.1 . . . 12 = 2127 (224 1) 223
|{z}
| . .{z
| .{z
s(1)
c(8)
f(23)
= 2104 (224 1)
(cel mai mare num
ar nenul reprezentabil)

Formatele single si double


Formatul double (precizie dubla): n = 64, k = 11, p = 53

Emin = 1022, Emax = 1023, bias = 1023


971
Intervalul de numere 0 reprezentabile este: [0, 2
(253 1)]
Rezult
a:

Cel mai mic num


ar nenul reprezentabil este

21022 0.0
. . 01}2 = 21074 ,
| .{z
53 cifre ale mantisei

reprezentat:

0 0| .{z
. . 0} 0| . .{z. 0 1}
|{z}

s (1 bit) c (11 biti) f(52 biti)


Cel mai mare num
ar nenul reprezentabil este

21023 1.1
. . . 1}2 = 2971 (253 1),
| {z
53 cifre ale mantisei

reprezentat:

0 1| . .{z. 1 0} 1| .{z
. . 1}
|{z}

s (1 bit) c (11 biti) f(52 biti)

Formatele single si double

Numerele din intervalul


reprezentate.
Numerele din intervalul

1074

(0, 21074 )

sunt prea mici pentru a fi

[21074 , 21021 ]

sunt reprezentate cu pasul

i 1021, 1022, numerele din intervalul [2i , 2i+1 ]


i52
sunt reprezentate cu pasul 2
.
1023
Numerele din intervalul [2
, 2971 (253 1)] sunt reprezentate
971
cu pasul 2
.

Pentru orice

Formatele single si double


Ilustrare grafica:
. . 0} = 0
0 0
. . 0} 0
| .{z
|{z}
| .{z
s(1) c(11)
f(52)

...

(numere nereprezentabile)

1022
0 0
. . 0} 0
0.0 . . . 012
|{z}
| .{z
| . .{z. 0 1} = 2
s(1) c(11)
f(52)
(cel mai mic num
ar nenul reprezentabil)

...

= 21022 252

= 21074

pas 21074

. . 1} = 21022 0.1 . . . 12 = 21022 (252 1) 252


0 0
. . 0} 1
| .{z
|{z}
| .{z
s(1) c(11) f(52)
= 21074 (252 1)
pas 21074
. . 0} = 21022 1.0 . . . 02
0 0
. 0 1} 0
| .{z
|{z}
| . .{z
s(1) c(11)
f(52)

...

pas 21074

= 21022

Formatele single si double


0 0
. 0 1} 1
. . 1} = 21022 1.1 . . . 12 = 21022 (253 1) 252
|{z}
| . .{z
| .{z
s(1) c(11)
f(52)
= 21074 (253 1)
pas 21074
. . 0} = 21022 10.0 . . . 02 = 21021 1.0 . . . 02 = 21021
0 0
| .{z
|{z}
| . . .{z0 1 0} 0
s(1)
c(11)
f(52)

...

pas 21073

0 0
. . 1} = 21021 1.1 . . . 12 = 21021 (253 1) 252
|{z}
| . . .{z0 1 0} 1
| .{z
s(1)
c(11)
f(52)
= 21073 (253 1)
pas 21073
. . 0} = 21021 10.0 . . . 02 = 21020 1.0 . . . 02 = 21020
0 0
| .{z
|{z}
| . . .{z0 1 1} 0
s(1)
c(11)
f(52)

Formatele single si double

...
. . 0} = 21022 1.0 . . . 02
0 1
| .{z
|{z}
| . . .{z1 0 1} 0
s(1) c(11)
f(52)

= 21022

...

pas 2970
0
. . 1} = 21022 1.1 . . . 12 = 21022 (253 1) 252
|{z} 1
| . . .{z1 0 1} 1
| .{z
s(1) c(11)
f(52)
= 2970 (253 1)
970
pas 2
. . 0} = 21022 10.0 . . . 02 = 21023 1.0 . . . 02 = 21023
0
. 1 0} 0
| .{z
|{z} 1
| . .{z
s(1)

...

c(11)

f(52)

pas 2971
0 1
. 1 0} 1
. . 1} = 21023 1.1 . . . 12 = 21023 (253 1) 252
|{z}
| . .{z
| .{z
s(1) c(11)
f(52)
= 2971 (253 1)
(cel mai mare num
ar nenul reprezentabil)
Formatul double are ca avantaj fat
a de formatul single at
at domeniul mai mare
al exponentului c
at, mai ales, precizia mai mare, datorat
a mantisei mai mari.

Formatele single si double


Exemplu:

S
a se reprezinte n format single si double num
arul real
x = 4.75.

Reprezent
am x n baza 2:
4 : 2 = 2 rest 0
2 : 2 = 1 rest 0
1 : 2 = 0 rest 1

0.75 2 = 1.5
0.5 2 = 1.0

deci (4)2 = 100

deci (0.75)2 = 0.11

Rezult
a (x)2 = 100.11
In notatia stiintific
a normalizat
a (n baza 2) avem: x = 1.0011 22
Deci:
semnul =
exponentul = 2
mantisa = 1.0011
In formatul single, deoarece 126 2 127, vom avea:
s = 1
c = (2 + 127)2 = (129)2 = 10000001
f = 00110000000000000000000

Formatele single si double


Deci reprezentarea binar
a a lui x ca single este:

11000000100110000000000000000000
Determin
am si reprezentarea hexa a lui x ca single:

1100
|{z} 0000
|{z} 1001
|{z} 1000
|{z} 0000
|{z} 0000
|{z} 0000
|{z} 0000
|{z}
C

deci reprezentarea hexa este:

C0980000

Formatele single si double


In formatul double, deoarece 1022 2 1023, vom avea:
s = 1
c = (2 + 1023)2 = (1025)2 = 10000000001
f = 0011000000000000000000000000000000000000000000000000
Deci reprezentarea binar
a a lui x ca double este:

11000000000100110000000000000000
00000000000000000000000000000000
Determin
am si reprezentarea hexa a lui x ca double:

1100
|{z} 0000
|{z} 0001
|{z} 0011
|{z} 0000
|{z} 0000
|{z} 0000
|{z} 0000
|{z}
C

0000
|{z} 0000
|{z} 0000
|{z} 0000
|{z} 0000
|{z} 0000
|{z} 0000
|{z} 0000
|{z}
0

deci reprezentarea hexa este:

C013000000000000

Formatele single si double


Exemplu:

S
a se determine valoarea x reprezentat
a de urm
atorul format
single:

11000000101000000000000000000000
Identific
am valorile c
ampurilor componente:

1 10000001
|
{z
}
|{z}
| {z } 01000000000000000000000
s

Deci:
s = 1
c = 10000001 = (27 + 1)2 = (129)2
f = 01000000000000000000000
Intruc
at 0 < c < 28 1 = 255, rezult
a (pentru single bias = 127):
x = (1)1 2129127 1.010000000000000000000002 =
= 22 (20 + 22 ) = 4 (1 + 0.25) = 4 1.25 = 5

Formatele single si double


Observatie:
Reprezent
arile single si double sunt date multioctet si se supun acelorasi
conventii de ordonare a octetilor n memorie ca si celelalte date.
Reamintim: conventia de ordonare este fixat
a hardware pentru fiecare
arhitectur
a si poate fi little endian (datele sunt reprezentate cu partea low la
adresa mai mic
a) sau big endian (datele sunt reprezentate cu partea low la
adresa mai mare); arhitectura Intel foloseste conventia little endian.
C
and ilustr
am grafic continutul memoriei obisnuim s
a desen
am octetii cu
adresele cresc
and spre dreapta si atunci, ntr-o arhitectur
a care foloseste
conventia little endian, locatiile ce contin cele dou
a reprezent
ari din primul
exemplu de mai devreme vor fi desenate astfel (un octet = dou
a cifre hexa):
Locatia ce contine reprezentarea single C0980000 va fi desenat
a 00 00 98 C0
Locatia ce contine reprezentarea double C013000000000000 va fi desenat
a
00 00 00 00 00 00 13 C0
In cazul registrilor se obisnuieste s
a se deseneze bitii si octetii cu semnificatia
cresc
and spre st
anga (asa cum se scriu numerele n matematic
a). Astfel, un
registru de 32 biti ce contine reprezentarea single C0980000 va fi desenat tot
C0980000

S-ar putea să vă placă și