Sunteți pe pagina 1din 35

Capitolul 1

CALCULUL N VIRGUL MOBIL

1.1

Aritmetica n virgul mobil

Rezolvarea diferitelor probleme cu ajutorul calculatorului numeric depinde,


ntr-o prima instan, de posibilitatea de a reprezenta numerele n maina de
calcul folosit. Aceast posibilitate depinde de tipul numerelor i de structura
constructiv (hardware) a echipamentului de calcul, anume: baza de
reprezentare a numerelor (baza mainii de calcul) i lungimea cuvntului de
memorie. Ca urmare, se poate reprezenta un numr finit de cifre n sistemul de
numeraie folosit. Din acest punct de vedere, numerele ntregi i cele reale
sufer un tratament diferit, dup cum se detaliaz n continuare.
Astfel, numerele ntregi reprezentabile n calculator, care formeaz mulimea
notat cu I, constituie o submulime finit a mulimii numerelor ntregi Z:
I Z . Reprezentarea acestor numere este exact, iar aritmetica cu aceste
numere este de asemenea exact, excepie facnd operaia de mprire, n
general.
Astfel, domeniul valorilor ntregi reprezentabile n calculatorul numeric este:
I = {z Z / m I z M I } ,
unde mrimile m I i M I depind de urmtoarele: spaiul de memorie pus la
dispoziie pentru acest tip de numere, baza de numeraie folosit, precum i
modul de reprezentare a acestor numere. Notnd cu baza de reprezentare a
numerelor ntregi i cu t I numrul de cifre n baza care pot fi reprezentate pe
un cuvnt sau multiplu de cuvnt de memorie, se pot scrie relaiile:
m I = t I 1 , M I = t I 1 1 .
Dac baza de numeraie este doi i sunt t I = 16 cifre binare, atunci domeniul
de reprezentare pentru numere ntregi este cuprins ntre 215 i 215 1 . Dac
numrul de cifre binare este t I = 32 , atunci domeniul de reprezentare este
cuprins ntre 2 31 i 2 31 1 .

1.

Calculul n virgul mobil

ncercarea de a opera cu numere care nu aparin domeniului I de


reprezentare, determin, la majoritatea calculatoarelor numerice, emiterea unor
mesaje de eroare fatal, programele implicate fiind abandonate: depire
(binar) inferioar (dac z < m I ), respectiv depire (binar) superioar
(dac z > M I ).
Uzual este reprezentarea n baza de numeraie doi, alocndu-se o cifr
binar pentru semn i t I 1 cifre pentru numr, anume reprezentarea n cod
complementar fa de baza definit astfel:
z0
z,
z c = tI
.
| z |, z < 0
Spre deosebire de numerele ntregi, n general numerele reale se reprezint
aproximativ n calculatorul numeric. n continuare se definesc dou submulimi
ale numerelor reale i anume:
submulimea G care conine numerele reale care s-ar putea reprezenta
n calculatorul numeric;
submulimea F care conine numerele reale care se reprezint efectiv n
calculatorul numeric.
n timp ce mulimea G, ca i mulimea numerelor reale , are un numr
infinit de elemente, mulimea F are un numr finit de elemente, relaia care se
poate scrie ntre aceste mulimi fiind: F G . Metoda cea mai larg folosit
pentru reprezentarea numerelor reale n calculator, numere care aparin mulimii
F, este cea a virgulei mobile.
Definiie:
Prin aritmetica virgulei mobile se neleg urmtoarele:
(a) un model matematic de reprezentare a numerelor (definirea mulimii F);
(b) o modalitate de reprezentare a numerelor din mulimea G n calculatorul
numeric, altfel spus o modalitate de implementare n calculator a modelului
(definirea operatorului de rotunjire, notat cu fl);
(c) operaiile elementare: adunarea, scderea, nmulirea i mprirea definite
cu numerele mulimii F.
Acestea sunt detaliate n seciunile urmtoare ale acestui subcapitol.
1.1.1 Numere n virgul mobil
Conceptul de numr n virgul mobil se poate introduce prin exemplul
urmtor.

1.5

Probleme propuse

Exemplul 1.1:
Fie numrul real x = 1234,56789 . Acesta se poate scrie i sub urmtoarele
forme:
x = 1234,56789 10 0 = 123456789,0 10 5 = 0,00123456789 10 6 =
= 0,123456789 10 4
Corespunztor ultimei forme scrise, se denumesc i se noteaz urmtoarele
elemente:
mantis (fracie), notat cu f, reprezentnd numrul fracionar;
exponent, notat cu e, reprezentnd exponentul la care este ridicat baza
de numeraie folosit;
baza de numeraie, notat cu , n cazul de fa egal cu 10;
numrul cifrelor mantisei, notat cu litera t.
Rezult, aadar, c poziia virgulei poate fi modificat, cu adaptarea
corespunztoare a exponentului. Din acest punct de vedere, se spune c
numerele ntregi tratate anterior sunt reprezentate n virgul fix.
Definiie:
O mulime de numere n virgul mobil este definit prin urmtorii
parametri:
(a) - baza mainii de calcul;
(b) t - numrul de cifre n baza utilizate pentru a reprezenta partea
fracionar (precizia mainii de calcul);
(c) L - cel mai mic exponent (limita de depire inferioar);
(d) U - cel mai mare exponent (limita de depire superioar).
Exponentul e este cuprins ntre valorile: L e U .
Definiie:
Mulimea F de numere n virgul mobil este:
F = {x / x = f e } {0} , unde:
d
d
d
f = 1 + + ii + + tt

LeU

, 0 d i 1, i = 1, , t

unde f este mantisa (fracia), e este exponentul, este baza mainii, t este
numrul de cifre n baza i d i sunt cifrele bazei.

1.

Calculul n virgul mobil

Dac pentru orice x F \ {0} , prima cifr a fraciei, d 1 , este diferit de zero,
atunci se spune c sistemul de numere n virgul mobil este normalizat. n
acest caz, poate fi scris relaia: 1 / | f |< 1 .
Orice numr x F \ {0} este cuprins ntre dou valori extreme:
m | x | M
M = L 1 , M = U (1 t )
Acestea se numesc: m cel mai mic numr real pozitiv reprezentabil, iar M
cel mai mare numr real pozitiv reprezentabil. n acest caz, mulimea G se
poate defini ca fiind:
G = {x / m | x | M} {0} = [ M, m] {0} [ m, M] .
ncercarea de a opera cu numere nenule care nu se ncadreaz ntre aceste
limite conduce, pentru majoritatea calculatoarelor numerice, la emiterea unor
mesaje de eroare fatal, care vor determina abandonarea programului: depire
flotant inferioar (dac | x |< m ), respectiv depire flotant superioar
(dac | x |> M ). n unele implementri, se atribuie valoarea zero pentru
numerele din prima categorie menionat, fr emiterea mesajului de eroare,
mpreun cu emiterea unui mesaj de avertizare.
Exemplul 1.2:
Se consider o mulime de numere n virgul mobil normalizat cu
urmtorii parametri: = 2 , t = 3 , L = 1 , U = 2 . Rezult, conform relaiilor
scrise mai sus: m = 1 / 4 i M = 7 / 2 . Elementele mulimii F sunt n acest caz:
.100 2 e , .101 2 e , .110 2 e , .111 2 e , e {1, 0, 1, 2} .
Numrul elementelor mulimii F este: card( F) = 33 . Elementele pozitive ale
mulimii F sunt prezentate n Figura 1.1.
m=

1
4

2-2

M=

2-1

20

21

Fig. 1.1 Elementele pozitive ale mulimii numerelor n virgul mobil


( = 2 , t = 3 , L = 1 , U = 2 , reprezentare normalizat)

7
2

1.5

Probleme propuse

Mulimea F este o mulime finit. ntre puterile succesive ale lui numerele
din mulimea F sunt echidistante, numrul acestora fiind constant. Numrul de
elemente ale lui F este dat de relaia:
card( F) = 2 t 1 ( 1) ( U L + 1) + 1 ,
n care mrimea t 1 ( 1) = t t 1 reprezint numrul constant de
elemente dintr-un interval definit de ctre dou puteri succesive ale bazei i
U L + 1 reprezint numrul de intervale determinate de ctre puterile
succesive ale lui . Produsul acestora este multiplicat cu 2 pentru a include att
numerele pozitive, ct i pe cele negative. Valoarea 1 este adugat pentru
elementul 0.
Concluzii:
(a) Numerele aparinnd mulimii F nu sunt echidistante n domeniul lor de
existen; acestea sunt mai dese n apropierea originii (puterile lui
scad) i mai rare spre extremitile mulimii F (puterile lui cresc).
(b) Numerele sunt echidistante numai ntre puterile succesive ale lui .
(c) Datorit faptului c mulimea F are un numr finit de elemente, nu se pot
reprezenta continuu, n detaliu, toate numerele reale; mai mult, fiecare
numr din mulimea F este asociat unui ntreg interval din mulimea G, deci
unui ntreg interval de numere reale.
Uzual este reprezentarea normalizat n baza de numeraie doi, alocndu-se
o poziie binar pentru semn, un numr de poziii binare pentru exponent i t
cifre binare pentru mantis. Deoarece tipul de semn al numrului este memorat,
pentru fracie se realizeaz o reprezentare a ntregului d 1d 2 d t t (valoarea
absolut a mantisei). De asemenea, pentru a nu se memora semnul i pentru
exponent, se reprezint un numr ntreg pozitiv: C = e + E 0 , mrimea E
numindu-se deplasament, iar mrimea C numindu-se caracteristic. Cum
reprezentarea este normalizat, prima cifr a fraciei este d 1 = 1 i nu se mai
reprezint. Astfel, se ctig nc o poziie binar pentru fracie. Se spune c se
realizeaz o reprezentare normalizat cu poziie binar ascuns (n limba
englez, hidden bit).
Exemplul 1.3:
Pentru = 2 i 32 de poziii binare pentru un numr real, reprezentarea se
realizeaz n simpl precizie, iar pentru 64 de poziii binare pentru un numr
real, reprezentarea se realizeaz n dubl precizie.

1.

Calculul n virgul mobil

Dup standardul IEEE (abreviere din limba englez, the Institute of


Electrical and Electronics Engineers Inc. USA), pentru = 2 rezult t = 24 ,
L = 126 i U = 127 pentru reprezentarea n simpl precizie i t = 53 ,
L = 1022 , U = 1023 pentru reprezentarea n dubl precizie. Rezult, de
asemenea, pentru reprezentarea n simpl precizie: m 10 38 i M 10 +38 , iar
pentru reprezentarea n dubl precizie: m 10 308 i M 10 +308 .
1.1.2 Reprezentarea aproximativ a numerelor. Scheme de rotunjire
Oricare ar fi un numr x G , x 0 , acesta poate fi scris sub forma:
x = f e + g e t .

(1.0)

Se vor considera fraciile normalizate, deci sunt ndeplinite relaiile:


1 / | f |< 1, 0 | g |< 1 .
Nu toate numerele din mulimea G se pot reprezenta exact, datorit faptului
c numai t cifre n baza pot fi reinute pentru fracie. n aceste condiii, se
spune c numrul este reprezentat aproximativ (rotunjit). Se definete
operatorul de rotunjire fl: fl : G F . Exist mai multe modaliti de definire a
acestuia i anume:
(a)

rotunjirea prin tiere (trunchiere): fl(x) este cel mai apropiat element
c F , de x G , cu proprietatea | c || x | .
Aceast modalitate de rotunjire este ilustrat n Figura 1.2. Astfel, oricare ar fi
numrul x [c 2 , c 3 ) , acesta va fi reprezentat prin elementul c 2 . Expresia
aproximantului pentru numrul real x este: fl( x ) = f e .

x
c1

c2

c3 F

Fig. 1.2 Principiul rotunjirii prin tiere (trunchiere): fl( x ) = c 2 , x [c 2 , c 3 )


Exemplul 1.4:
Se consider un sistem de numere n virgul mobil cu = 10 , t = 4 . Fie
numrul x = 12945,734 . Numrul x se poate scrie sub forma (1.1):
x = 0,12945734 10 5 = 0,1294 10 5 + 0,5734 10 5 4 ,

1.5

Probleme propuse

unde f = 0,1294; e = 5; g = 0,5734 . Rezult, aadar, valoarea reinut pentru


reprezentare i rotunjit prin tiere: fl( x ) = 0,1294 10 5 . Aceasta corespunde
numrului 12940 x .
(b)

rotunjirea simetric: fl(x) este cel mai apropiat element c F , de x G


(a se vedea Figura 1.3).

Analiznd Figura 1.3, rezult c oricare ar fi numerele x i y din intervalul


definit de elementele aflate la mijlocul intervalelor (c1 , c 2 ) i, respectiv,
(c 2 , c 3 ) , acestea vor fi reprezentate prin elementul c 2 al mulimii F, expresia
pentru fl(x) fiind n acest caz:

e
| g |< 0,
f ,
2.
fl( x ) =
e
e

t
f , | g | 0,

2
n ultima expresie, semnul + se consider pentru f > 0 i semnul - se
consider pentru f < 0 .
x
c1

y
c2

c3 F

Fig. 1.3 Principiul rotunjirii simetrice:


fl( x ) = c 2 , fl( y) = c 2 ; x ((c1 + c 2 ) / 2, c 2 ), y (c 2 , (c 2 + c 3 ) / 2)
Neajunsul acestei maniere de reprezentare const n faptul c dac numrul x
este situat la jumtatea distanei dintre dou numere consecutive din mulimea
F, atunci fl(x) poate lua oricare din cele dou valori nvecinate.
(c) rotunjirea uniform (metoda cifrei pare)
n acest caz, fl(x) are urmtoarea expresie:

1.

Calculul n virgul mobil

fl( x ) =
f

e ,
e e t ,
e e t ,
e ,

| g |> 0,
2
.

| g |= 0, , ultima cifra f impara


2

| g |= 0, , ultima cifra f para


2
| g |< 0,

n aceast expresie de definiie, semnul + se consider pentru f > 0 i semnul


- se consider pentru f < 0 . Aceast modalitate de reprezentare este adoptat
i de standardul IEEE.
Exemplul 1.5:
Se consider = 10 , t = 4 i o rotunjire uniform.
(a)
x = 12944,9942 = 0,1294 10 5 + 0,4994 10 5 4 .
Se observ c |g| este mai mic dect 0.5, deci:
fl( x ) = 0,1294 10 5 ( = 12940 x ) .
(b)

x = 129551 = 0,1295 10 6 + 0,51 10 6 4 .


Se observ c |g| este mai mare dect 0.5, deci:
fl( x ) = 0,1295 10 6 + 10 6 4 ( = 129600 x ) .

(c)

x = 1297,5 = 0,1297 10 4 + 0,5 10 4 4 .


Se observ c |g| este egal cu 0.5 i ultima cifr a lui f este impar, deci:
fl( x ) = 0,1297 10 4 + 10 4 4 (= 1298 x ) .

(d)

x = 1296,5 = 0,1296 10 4 + 0,5 10 4 4 .


Se observ c |g| este egal cu 0.5 i ultima cifr a lui f este par, deci:
fl( x ) = 0,1296 10 4 (= 1296 x ) .

n continuare se consider mulimea F mpreun cu o rotunjire fixat. n


plus, se consider orice numr nenul aparinnd mulimii G, pentru care exist
reprezentare n mulimea F: x G , x 0, fl( x ) F . Cum, n general,
numrul x aparinnd mulimii G se reprezint aproximativ, se pot defini
urmtoarele dou tipuri de erori:
(a) eroarea absolut, notat e x :
e x =| x fl( x ) | ;
(b)

eroarea relativ, notat x :


x = e x / | x | e x / | fl( x ) |=| x fl( x ) | / | fl( x ) | .

1.5

Probleme propuse

n expresia anterioar, |x| s-a aproximat prin |fl(x)| deoarece, n general,


valoarea x nu se cunoate n sensul c nu se poate reprezenta exact n calculator.
Se demonstreaz c eroarea relativ maxim se produce cnd f ia cea mai mic
valoare i g ia cea mai mare valoare, adic f = 1 / i g = 1 :
x =

| x fl( x ) | | f e + g e t fl( x ) |
1 et
=
k
k 1 t ,
e
| fl( x ) |
| fl( x ) |
(1 / )

unde 1 t este o mrime specific mainii de calcul, ea caracteriznd precizia


relativ de reprezentare. Aceast mrime se mai numete i cea mai mare
spaiere relativ i este asociat cu rotunjirea prin tiere, pentru care k = 1 .
Pentru rotunjirea simetric, rezult k = 1 / i atunci eroarea relativ maxim
are valoarea t , mrime denumit cea mai mic spaiere relativ.
Definiiile anterioare se pot extinde imediat la cazul vectorial, pentru
elemente dintr-un spaiu vectorial normat (a se vedea Anexa A). Astfel,
considernd vectorul cu componente reale x = [ x 1 x n ] T , unde T
reprezint operaia de transpunere vectorial, se definesc urmtoarele:
(a)

eroarea absolut (vectorial):


e x , =|| x FL( x ) || , FL( x ) = [fl( x 1 ) fl( x n )] T ,

unde || . || este o norm vectorial uzual;


(b) eroarea relativ (vectorial):
x , = e x , / || FL( x ) || .
1.1.3 Operaii elementare n virgul mobil
Se definesc operaiile elementare care au loc cu elementele unei mulimi F
de numere n virgul mobil. Aceste modaliti de definire sunt implementate
uzual n calculatoarele numerice.
A. Adunarea
Oricare ar fi dou numere x i y din mulimea G, pentru care exist fl(x) i
fl(y) aparinnd mulimii F, numrului x + y i se asociaz numrul fl( x + y )
obinut prin aplicarea urmtorului algoritm:
Pas 1: se reprezint intern numerele x i y prin fl(x) i, respectiv, fl(y).
Pas 2: dac numerele au exponent diferit, atunci numrul cu exponent mai mic
se aduce la o form n care exponentul s fie egal cu cel al celuilalt

10

1.

Calculul n virgul mobil

termen, operaiune care se numete denormalizare. Acest lucru se


realizeaz prin deplasarea mantisei spre dreapta, insernd zerouri dup
virgul.Astfel, se deplaseaz mantisa attea poziii cte sunt necesare
pentru a crete exponentul la valoarea exponentului celuilalt termen.
Pas 3: se adun mantisele i din rezultat se pstreaz t cifre.
Pas 4: dac este necesar, se normalizeaz rezultatul.
Observaii:
1. Deplasarea mantisei spre dreapta determin creterea exponentului, iar
deplasarea spre stnga a mantisei determin scderea exponentului.
2. Scderea se realizeaz la fel ca adunarea, cu deosebirea c mantisele se
scad. n fapt, scderea reprezint o adunare n care scztorul are semn
schimbat.
Consecina esenial a acestui mod de definire este aceea c, spre deosebire
de aritmetica real, adunarea n virgul mobil nu este asociativ.
Exemplul 1.6:
Se consider o aritmetic a virgulei mobile cu = 10 , t = 3 , reprezentare
normalizat i rotunjire prin tiere. Fie calculul: 0,001 + 1 1 . Asociind primii
doi termeni, se ajunge la rezultatul fl(fl(10 3 + 1) 1) = 0 , care este eronat. n
cazul asocierii ultimilor doi termeni se obine: fl(10 3 + fl(1 1)) = 10 3 , care
este rezultatul corect.
Exemplul 1.7:
Se consider o aritmetic a virgulei mobile cu = 10 , t = 3 , reprezentare
normalizat i rotunjire prin tiere. Fie calculul: 1,001 1 . Se obine:
fl(1,001 1) = 0 , rezultat eronat.
Exemplele 1.6 i 1.7 pun n eviden dou fenomene nedorite i generatoare
de erori, care pot apare la efectuarea unei adunri n virgul mobil:
(a)

omiterea catastrofal: apare atunci cnd se adun doi termeni i valoarea


absolut a unui termen este mai mic dect precizia de reprezentare a
celuilalt termen; n acest caz, rezultatul este dat de termenul cu valoare
absolut mai mare (aceast situaie este ilustrat n Exemplul 1.6).

(b)

neutralizarea termenilor: apare atunci cnd se adun numere cu semne


diferite i cu valori absolute apropiate; n acest caz, n mod eronat,
rezultatul este nul (aceast situaie este ilustrat n Exemplul 1.7).

Precizia calculelor numerice este caracterizat de dou mrimi constante a


cror valoare este dependent de tipul mainii de calcul folosite. Cele dou

1.5

Probleme propuse

11

valori menionate, numite i constante de main, sunt introduse prin


urmtoarea definiie.
Definiie:
Epsilonul main pentru adunare (notat +m ) reprezint cel mai mic numr real
pozitiv reprezentabil care schimb, prin adunare, unitatea mainii de calcul:
fl(1 + +m ) > 1 .
Epsilonul main pentru scdere (notat m ) reprezint cel mai mic numr real
pozitiv reprezentabil care schimb, prin scdere, unitatea mainii de calcul:
fl(1 m ) < 1 .
n Figura 1.4 sunt ilustrate cele dou definiii. Conform Figurii 1.4, sunt
ndeplinite relaiile:
adunare: fl(1 + +m ) > 1, fl(1 + c) = 1 ;

scdere: fl(1 +m ) < 1, fl(1 c) = 1 .

c F

m-

m+

Fig. 1.4 Conceptul de epsilon main


Astfel, rezult c cele dou mrimi au valorile: +m = 1 t , m = t .
Se demonstreaz c, pentru o aritmetic a virgulei mobile cu = 2 , este
ndeplinit relaia: +m = 2 m .
Exemplul 1.8:
Valorile celor dou constante de main, n standardul IEEE, sunt
urmtoarele:
pentru reprezentarea n simpl precizie:
m = 5.96 10 8 ; +m = 1.19 10 7 ;

pentru reprezentarea n dubl precizie:


m = 1.11 10 16 ; +m = 2.22 10 16 .

Urmtorul algoritm, descris n limbaj pseudocod (a se vedea Anexa B),


descrie modul de calcul al epsilonului main pentru adunare, rezultatul final
gasindu-se n variabila eps_p:

12

1.

Calculul n virgul mobil

atribuie eps_p 1
ct timp ( 1 + eps _ p > 1 ) execut
atribuie eps_p 0.5*eps_p

atribuie eps_p 2*eps_p.


B. nmulirea
Oricare ar fi x i y, dou numere din mulimea G, pentru care exist fl(x) i,
respectiv, fl(y) aparinnd multimii F, numrului x y i se asociaz numrul
fl( x y) , care se determin cu algoritmul urmtor:
Pas 1: se reprezint intern numerele x i y prin fl(x) i, respectiv, fl(y).
Pas 2: se nmulesc fraciile i se adun exponenii.
Pas 3: din fracia rezultat se opresc t cifre.
Pas 4: dac este necesar, se normalizeaz rezultatul.
Observaii:
1. nmulirea nu este asociativ.
2. mprirea se realizeaz n aceeai manier ca i nmulirea, cu deosebirea
c la pasul 2 mantisele se mpart, iar exponenii se scad.
Exemplul 1.9:
Se consider o aritmetic a virgulei mobile cu = 10 , t = 3 , reprezentare
normalizat i rotunjire prin tiere. Fie x = 22,547 i y = 0,43936 . Rezult
fl( x y) = 9,900 .

1.2

Propagarea erorilor n calculele numerice

n general, n cursul rezolvrii unei probleme cu ajutorul calculatorului


numeric, precizia calculelor este influenat de mai muli factori. Astfel, eroarea
total dintr-un calcul numeric este generat de trei surse principale de erori:
(a)

erori inerente;

(b)

erori de metod (de calcul);

(c)

erori de reprezentare.

Erorile inerente provin din datele iniiale ale problemei de rezolvat (date
care pot fi rezultatele unor msurtori experimentale sau ale altor calcule
anterioare) i/sau erorile provenite din faptul c se lucreaz cu un model
aproximativ al fenomenului real implicat n problema de rezolvat.

1.5

Probleme propuse

13

Erorile de metod (sau de trunchiere) sunt datorate metodei numerice


utilizate. n general, este necesar un numr mare de operaii pentru a putea
ajunge la soluia exact (de regul, atunci cnd o expresie de calcul conine o
infinitate de termeni) i calculele sunt oprite, n funcie de un anumit criteriu,
atunci cnd se ajunge la o anumit precizie acceptabil (aadar contientizat).
Erorile de reprezentare sunt datorate posibilitii efective de a reprezenta
numerele n calculatorul numeric. Acest tip de erori se manifest n datele
iniiale, intermediare i n cele de ieire care constituie rezultatele finale.
Definiie:
Se numete calcul aproximativ, un calcul efectuat ntr-o aritmetic a
virgulei mobile.
Fie x i y dou numere aparinnd mulimii G i reprezentate n mulimea F
prin fl(x) i, respectiv, fl(y). Fie una din operaiile elementare definite
anterior. Atunci, pot fi scrise urmtoarele relaii:
x = fl( x ) + e x , y = fl( y) + e y , x = e x / fl( x ), y = e y / fl( y) ,
x y = fl( x y) + e xy , xy = e xy / fl( x y) .
Se accept ca postulat urmtoarea afirmaie: eroarea relativ ntr-un calcul
aproximativ cu numere aproximative este egal cu suma dintre eroarea relativ
produs de calculul exact respectiv cu numere aproximative ( T1 ) i eroarea
relativ produs de calculul aproximativ cu numerele exacte corespunztoare (
T2 ).
Acest postulat, descris de ctre relaia:
xy = T1 + T2 ,
permite determinarea modalitii de propagare a erorilor relative pentru
operaiile efectuate n virgul mobil, dup cum urmeaz.
Pentru calculul exact cu numere aproximative (termenul T1 ), rezult:
e x 0, e y 0, fl( x y) = fl( x ) fl( y),
T1 = k 1 x + k 2 y .
Constantele k 1 i k 2 au valori diferite, n funcie de operaia efectuat:
pentru adunare:
k1 =

pentru scdere:

fl( x )
fl( y)
, k2 =
;
fl( x ) + fl( y)
fl( x ) + fl( y)

14

1.

Calculul n virgul mobil

k1 =

fl( x )
fl( y)
, k2 =
;
fl( x ) fl( y)
fl( x ) fl( y)

pentru nmulire:
k1 = k 2 = 1 ;

pentru mprire:
k 1 = 1, k 2 = 1 .

Pentru calculul aproximativ cu numere exacte (termenul T2 ), rezult:


e x = 0, e y = 0, fl( x y) fl( x ) fl( y),
i atunci:
T2 k 1 t ,
ca pentru orice numr real care nu se reprezint exact.
Exemplul 1.10:
Se consider evaluarea urmtorului polinom:
y( x ) = x 7 7 x 6 + 21 x 5 35 x 4 + 35 x 3 21 x 2 + 7 x 1 ,
pentru valori ale variabilei x n intervalul [0.998,1.012] i utiliznd un pas de
evaluare egal cu 0.0001. Figura 1.5 ilustreaz cu linie punctat rezultatul
calculelor n dubl precizie (standardul IEEE) utiliznd formula de mai sus, cu
linie continu fiind reprezentate rezultatele corecte. Acestea din urm sunt
obinute evalund polinomul y( x ) = ( x 1) 7 .

1.5

x 10

Probleme propuse

15

-14

4
3
2
1
0
-1
-2
-3
-4
-5
0.985

0.99

0.995

1.005

1.01

1.015

Fig. 1.5 Ilustrarea propagrii erorilor ntr-un calcul numeric


Analiznd Figura 1.5, se remarc faptul c valorile calculate sunt de ordimul
a 10 14 , ceea ce evideniaz erori relativ mici ntre rezultatele celor dou
maniere de calcul. Aceste diferene se explic prin fenomenele de neutralizarea
termenilor i omitere catastrofal.
Cele expuse pn acum demonstreaz faptul c ntr-un calcul numeric erorile
se propag de la o operaie la alta. Pe msur ce numrul operaiilor dintr-un
calcul crete, pot apare situaii n care erorile se acumuleaz excesiv de mult,
fapt care determin obinerea unei valori total incorecte a rezultatului final. Ca
urmare, la ntocmirea unui algoritm de calcul i apoi la implementarea acestuia
ntr-un program, utilizatorul trebuie s se asigure c soluiile nu vor fi afectate
de erori care s depeasc anumite limite admisibile.
Se pot formula urmtoarele reguli generale pentru mrirea preciziei
calculelor:
1. cnd se adun sau se scad numere, este recomandabil s se nceap cu cele
mai mici n valoare absolut, separat pentru cele negative i separat pentru
cele pozitive;

16

1.

Calculul n virgul mobil

2. dac este posibil, este recomandabil s se evite scderea a dou numere


aproximativ egale; o expresie care conine o astfel de scdere poate fi
rescris.
3. o expresie de forma (a b) c poate fi rescris sub forma a c b c , iar o
expresie de forma (a b) / c poate fi rescris sub forma a / c b / c ; dac
numerele a i b sunt aproximativ egale, este recomandabil s se efectueze
mai nti scderea i apoi nmulirea sau mprirea;
4. dac regulile generale anterior enunate nu se pot aplica, atunci se va urmri
minimizarea numrului de operaii aritmetice implicate.
Exemplul 1.11:
Se consider urmtoarele relaii de calcul:
h = 1 / 2, x = 2 / 3 h , y = 3 / 5 h, e = x + x + x h ,
f = y + y + y + y + y h , q = f / e.
Efectund calculele manual, se obin rezultatele:
h = 1 / 2, x = 1 / 6, y = 1 / 10, e = 0, f = 0, q = ?
Implementnd aceste relaii de calcul ntr-un program scris ntr-un limbaj
oarecare i executat pe un calculator cu o aritmetic a virgulei mobile avnd
baza = 2 , se obin rezultatele:
e 0, f 0, q = valoare finit.
Explicaia acestor rezultate const n urmtoarele:
numrul 2 / 3 = 0, (6) are un numr infinit de cifre n baza de numeraie
zece i deci nu va fi reprezentat exact;
numrul 3 / 5 = 0,6 n baza de numeraie zece, dar este un numr cu o
infinitate de cifre n baza de numeraie doi, deci nici acest numr real
nu va fi reprezentat exact: 0,6 zece = 0, (1001) doi .
Aceste erori de reprezentare se vor propaga n calculul valorilor e i f rezultnd
valori de ordinul epsilonului main.
Exemplul 1.12:
Fie ecuaia: a x 2 + b x + c = 0 , cu a , b, c . Soluiile reale ale ecuaiei se
calculeaz, de regul, utiliznd urmtoarele relaii:
x 1, 2 =

b b2 4 a c
, b2 4 a c 0 .
2a

1.5

Probleme propuse

17

Utiliznd aceste relaii de calcul, pentru determinarea soluiilor ecuaiei cu


ajutorul unui calculator avnd = 10 , t = 8 , L = 50 i U = 50 , se obin
urmtoarele rezultate:
pentru a = 1 , b = 10 5 , c = 1 : x 1 = 10 5 i x 2 = 0 , n timp ce valorile
adevrate sunt x 1,a = 99999.99999 i x 2,a = 0.00001 .

(a)

Diferenele se datoreaz fenomenului de omitere catastrofal care apare


la calculul discriminantului: b 2 4 a c b 2 , pentru datele prezentate.
pentru a = 6 10 30 , b = 5 10 30 , c = 4 10 30 , programul va fi abandonat
cu emiterea mesajului de depire flotant superioar; aceast eroare
se produce la calculul discriminantului, atunci cnd b este ridicat la
puterea a doua.
pentru a = 1 , b = 4 , c = 4 10 8 : x 1 = x 2 = 2 , rezultat care este
eronat, datorit fenomenului de neutralizare a termenilor aprut la
calculul discriminantului.

Pentru a evita obinerea de rezultate eronate, se adopt urmtoarea soluie:


pentru a evita depirea flotant superioar care s-ar putea produce la
calculul lui b 2 , precum i pentru evitarea fenomenului de omitere
catastrofal, se rescrie discriminantul sub forma:
= = ( b / 2) 2 a c .
Dac | b / 2 | c , se folosete relaia de calcul:
=| b / 2 | 1 ( 2 a / b) (2 c / b) ,
n care factorul 2 c / b 1 .
Dac | b / 2 |< c , se folosete relaia de calcul:
= | c | ( b / 2) [b /( 2 | c | )] a ,

(b)

n care factorul b /( 2 | c |) 1 .
dup calculul discriminantului, pentru evitarea neutralizrii termenilor, se
calculeaz mai nti rdcina cu modulul mai mare, innd cont de
semnul lui b:
x 1 = ( b / 2 + sign ( b) ) / a .
Rdcina cu modulul mai mic se determin folosind relaiile lui Vite
ntre rdcini i coeficieni:
x 2 = c /(a x 1 ) .

18

1.

Calculul n virgul mobil

Procednd ntr-o astfel de manier, n aceeai aritmetic a virgulei mobile, se


obin rezultatele x 1 = 100000 i x 2 = 0.00001 pentru primul set de coeficieni
prezentat. Pentru al doilea set de coeficieni, situaia de eroare fatal nu mai
apare, iar pentru ultimul set de coeficieni se obin rezultatele x 1 = 2.0001 i
x 2 = 1.9999 .
Se recomand abordarea exerciiului E1.5, care se refer la un algoritm
general pentru rezolvarea cu acuratee a ecuaiei algebrice de ordinul al doilea,
indiferent de natura (real sau complex) a soluiilor.

1.3

Natura problemelor de calcul i caracterizarea


algoritmilor

1.3.1 Natura problemelor de calcul


Se consider o anumit problem de calcul. Din punctul de vedere al
matematicii reale, problema lucreaz cu datele exacte notate cu D. Se noteaz
generic cu G ceea ce se dorete a calcula, implicnd anumite relaii matematice
exacte. Aceasta poate fi scris sub forma unei aplicaii: D G (D) , cum este
prezentat principial n Figura 1.6. Aadar, G(D) reprezint soluia matematic
exact, obinut lucrnd cu datele exacte D.
Se consider D ca fiind datele D afectate de eroare (datele D perturbate). n
acest caz, soluia exact matematic a problemei de calcul corespunztoare
datelor perturbate D se noteaz cu G ( D ) .
Definiie:
Problema de calcul, G, se spune c este bine condiionat dac datele
exacte ale problemei, D, i datele perturbate ale problemei, D , fiind apropiate
ntr-un anumit sens, atunci i soluia exact matematic a problemei de calcul
corespunztoare datelor exacte, G(D), este apropiat, ntr-un anumit sens de
soluia exact matenatic a problemei de calcul corespunztoare datelor
perturbate, G(D*). Altfel, problema de calcul se spune c este prost (sau ru)
condiionat.

1.5

Probleme propuse

19

G
G(D)

G(D*)

D*
G
spaiul datelor

spaiul soluiilor

Fig. 1.6 Conceptul de problem bine condiionat: D D G (D) G (D )


Altfel spus, o problem este bine condiionat dac mici perturbaii n una
sau toate datele iniiale ale problemei conduc la mici perturbaii n datele de
ieire (rezultate sau soluii).
Observaie:
Pentru a caracteriza apropierea sau ndeprtarea dintre D i D ,
respectiv G ( D) i G (D ) , trebuie cunoscute dou elemente: natura datelor D i
natura soluiilor G ( D) .
Dac D i G ( D) aparin mulimii numerelor complexe, atunci se va folosi
funcia modul pentru a aprecia diferenele | D D | i, respectiv,
| G ( D) G ( D ) | .
Dac D i G ( D) sunt elementele unui spaiu liniar finit dimensional
(vectori, matrice), se vor folosi, corespunztor, norme vectoriale, respectiv
matriciale.
n cele ce urmeaz, se noteaz generic erorile absolute ale mrimilor
implicate cu:
e D =| D D | i e G =| G ( D) G (D ) | .
Se poate defini numrul de condiie al problemei G ca fiind raportul dintre
eroarea absolut n soluiile problemei de calcul i eroarea absolut n datele de
intrare ale problemei de calcul:
k (G ) = e G / e D .
Dac acest numr de condiie este egal cu 1 sau are valori apropiate de 1, se
spune c problema este bine condiionat. Dac numrul de condiie este mare

20

1.

Calculul n virgul mobil

sau foarte mare, atunci erorile n datele iniiale sunt amplificate n soluia
problemei de calcul exact matematic, problema de calcul fiind prost
condiionat.
Exemplul 1.13:
Rezolvarea ecuaiilor polinomiale este o problem prost condiionat. Fie
Pn ( x ) un polinom de gradul n:
Pn ( x ) = a 0 x n + a 1 x n 1 + + a n 1 x + a n ,
unde a i , i = 1,..., n; a 0 0 sunt coeficienii polinomului. Se dorete
determinarea valorilor lui x pentru care Pn ( x ) = 0 .
n cele ce urmeaz, se va demonstra c mici variaii n coeficienii
polinomului conduc la variaii mari n soluiile calculate reprezentnd rdcinile
polinomului.
Se consider, n continuare, o alt problem i anume cea a calculului
valorilor proprii ale unei matrice reale ptratice, pe baza ecuaiei caracteristice
ataate. Se consider matricea A i varianta perturbat a acesteia, A p , de forma:
a 1 0
0 a 1

A =

0 0

0
a 1 0

0 a 1

0 , A p =

a nxn
0

0 .

1
a nxn

Ecuaia caracteristic ataat matricei A p este: p n ( ) = det( I n A p ) = 0 ,


unde I n este matricea unitate de ordinul n. Rezult:
p n ( ) = ( a ) n ( 1) n .
Ecuaia p n ( ) = 0 conduce la ( a ) n = (1) n . Aadar, o perturbaie n
datele de intrare, conduce la o perturbaie de

| | n soluiile calculate.

Se consider n = 10 i a = 1 . Pentru cazul n care = 0 , rezult valorile


proprii i = a = 1, i = 1, ,10 . Pentru cazul n care 0, = 10 10 , atunci
valorile
e D = 10

proprii
10

sunt
1

i = a + 10 10 10 = 1 + 0.1 = 1.1, i = 1, ,10 .

Rezult:

i e G = 10 . Dac = 10 10 , atunci se obin 10 valori proprii


complex conjugate, dispuse n planul complex pe un cerc cu centrul n punctul
de coordonate (a,0) i de raz egal cu 10 10 10 = 0.1 . Cu valorile numerice

1.5

Probleme propuse

21

considerate, n cazurile particulare ale unei perturbaii nenule, numrul de


condiie al acestei probleme este:
k = e G / e D = 10 1 / 10 10 = 10 9 ,
deci eroarea din datele iniiale ale problemei de calcul a fost amplificat de 10 9
ori n soluiile calculate.
n practic, datorit acestui fapt, nu se calculeaz valorile proprii ale unei
matrice prin aducerea matricei la forma canonic Jordan, utilizat n cadrul
acestui exemplu, pentru c pot apare perturbaii cel puin de genul celor
prezentate.
1.3.2 Caracterizarea algoritmilor
Se consider o problem de calcul oarecare care lucreaz cu setul de date
exacte D. Soluia exact matematic a acestei probleme este dat de funcia G.
Se consider, n plus, datele perturbate ale problemei, D .
La implementarea funciei G pe un calculator numeric, practic se lucreaz cu
un algoritm G (a se vedea Figura 1.7).

G
G(D*)

D*

G (D)

D
G*
spaiul datelor

spaiul soluiilor

Fig. 1.7 Conceptul de algoritm stabil numeric: D D G ( D) G ( D )


De exemplu, considernd c G este o problem bine condiionat i c G
implementeaz exact soluia G, totui G ( D) G ( D) datorit aritmeticii n
virgul mobil.
Natura algoritmului este teoretic caracterizat de urmtoarele dou mrimi:
(a) soluia matematic exact a problemei de calcul corespunztoare setului
de date perturbate, G ( D ) ;

22

(b)

1.

Calculul n virgul mobil

soluia algoritmului G corespunztoare setului de date exacte, G ( D) .

Definiie:
Un algoritm G se numete stabil numeric, dac datele exacte i datele
perturbate ale problemei de calcul G fiind apropiate ntr-un anumit sens, atunci
i soluia exact matematic corespunztoare setului de date perturbate G(D*)
este apropiat, ntr-un anumit sens, de soluia algoritmului corespunztoare
setului de date exacte G*(D). Altfel, algoritmul se spune c este instabil din
punct de vedere numeric.
Altfel spus, erorile din datele de intrare sunt micorate de un algoritm stabil
numeric, un algoritm instabil numeric amplificndu-le.
Observaii:
(a) Nu se poate atepta ca un algoritm stabil numeric s rezolve o problem
prost condiionat cu o precizie mai mare dect a datelor de intrare.
(b) Un algoritm instabil numeric furnizeaz, de regul, rezultate eronate chiar
pentru probleme bine condiionate.
Definiie:
Un algoritm numeric se spune c este general dac este aplicabil pentru un
domeniu larg de date de intrare.
Definiie:
Un algoritm se spune c este sigur n funcionare, dac are prevzut un
mecanism care s avertizeze atunci cnd erorile au crescut excesiv de mult.
Observaie:
Un algoritm instabil numeric poate fi sigur n funcionare, dac este capabil
s detecteze instabilitatea numeric.
Concluzie:
Rolul calculului numeric (al analizei numerice) este de a analiza natura
problemelor de calcul i de a realiza o proiectare optim a algoritmilor. Dac
problema de calcul este prost condiionat, atunci aceasta se reformuleaz,
echivalent, obinnd o problem bine condiionat. Mai departe, pentru
problema bine condiionat rezultat, se proiecteaz un algoritm care s fie
stabil numeric, general i sigur n funcionare.
Exemplul 1.14:

1.5

Probleme propuse

23

Un exemplu de algoritm instabil numeric este cel folosit pentru calculul


integralei definite:
1

I n = x n e x 1 dx ,
0

prin relaia de recuren, exact matematic:


I n = 1 n I n 1 , n = 2, 3, ,
I1 = 1 / e, e = 2.71828182... .
Se consider un calculator cu = 10 i t = 6 . Vor rezulta urmtoarele
valori:
I1 0.367879

I 0.068400 < 0 !
9
dar, pentru I 9 , integrandul x 9 e x 1 este pozitiv pentru x (0,1) . Aadar, s-a
obinut pentru I 9 o valoare eronat. Singura eroare comis a fost cea n
estimarea lui 1 / e , care determin o eroare n evaluarea lui I1 egal cu
e1 = 4.412 10 7 . Pentru evaluarea lui I 2 , eroarea comis este e 2 ( 2) e1 ;
pentru I 3 eroarea comis este e 3 (3) e 2 i aa mai departe pn la I 9 cnd
se obine o eroare e 9 = 9!e1 = 0.1601 . I 9 + e 9 = 0.0916 , ceea ce reprezint
rezultatul exact cu patru cifre zecimale. Aceste rezultate arat c algoritmul
utilizat este instabil numeric.
Stabilizarea algoritmului se poate realiza rescriind relaia de recuren sub
forma:
I n 1 = (1 I n ) / n = 1 / n I n / n , n = , 3, 2 .
Un majorant pentru I n este:
1

I n = x n e x 1 dx x n dx =

1
,
n +1

deoarece | e x 1 |< 1 pentru x (0,1) . Aadar, I n n


0 .

Pentru diverse valori ale lui n se obin urmtoarele erori comise la calculul
integralei definite, considernd I 20 = 0 :
n = 20

e 20 1 / 21 ;

24

1.

n = 19

n = 15

n =9

1.4

Calculul n virgul mobil

e19 e 20 / 20 ;
e15 < 4 10 8 < 1 t = 10 5 ;
I = 0.091612 - valoare cu ase zecimale exacte.
9

Exerciii propuse

E1.1 S se realizeze, ntr-un limbaj de programare, un program coninnd


urmtoarea secven de instruciuni descris n limbajul pseudocod
(Anexa B), n legtur cu Exemplul 1.11:
atribuie h 1/2
scrie h = , h
atribuie x 2/3 - h
scrie x = , x
atribuie y 3/5 - h
scrie y = , y
atribuie e (x+x+x) - h
scrie e = , e
atribuie f (y+y+y+y+y) - h
scrie f = , f
atribuie q f/e
scrie q = , q
S se explice rezultatele obinute.
E1.2 S se realizeze, ntr-un limbaj de programare, un program coninnd
urmtoarea secven de instruciuni descris n limbajul pseudocod:
atribuie h 1/10
atribuie x 0
pentru i = 1:10 execut
atribuie x x + h

atribuie dif1 1 - x
scrie * test adunare:
scrie x = , x
scrie dif1 = , dif1
atribuie y 10 * h
atribuie dif2 1 - y

1.5

Probleme propuse

25

scrie * test inmultire:


scrie y = , y
scrie dif2 = , dif2
S se explice rezultatele obinute.
E1.3 Se considera problema evalurii, n diverse puncte x, a funciei e x .
Calculul se bazeaza pe dezvoltarea n serie Taylor, n jurul originii, a
funciei i oprirea unui anumit numr de termeni, la precizia mainii.
S se realizeze, ntr-un limbaj de programare (de exemplu MATLAB), un
program pentru urmtorul algoritm, descris parial n limbajul pseudocod:
atribuie IndRel 1
ct timp ( IndRel = 1 ) execut
scrie x =
citete x
atribuie sum 1
atribuie trm 1
atribuie n 0
atribuie olds sum
atribuie n n + 1
atribuie trm trm * x/n
atribuie sum sum + trm
ct timp ( sum ~= olds ) execut
atribuie olds sum
| atribuie n n + 1
| atribuie trm trm * x/n
| atribuie sum sum + trm

atribuie f sum
scrie nr.iter. = n, f = f
atribuie fx exp(x)
scrie fx = fx
scrie 1=reluare; 0=nu :
citete IndRel

Observaii:
1. ~= este notaia MATLAB pentru operatorul relaional diferit de.
2. exp este numele funciei MATLAB pentru calculul exponenialei.
3. Programul se va rula pentru urmtoarele date de intrare:

26

1.

Calculul n virgul mobil

x : 0.4; -0.4; 30.4; -30.4; 50.; -50.


S se interpreteze rezultatele obinute.
E1.4 S se realizeze, ntr-un limbaj de programare (de exemplu MATLAB), un
program pentru urmtorul algoritm, descris parial n limbajul pseudocod.
Se rezolva problema de la exerciiul E1.3, eliminnd de aceasta dat
eroarea de metod. Astfel, algoritmul descris n exerciiul anterior
conduce la apariia fenomenelor nedorite de neutralizare a termenilor i
omitere catastrofal, pentru argumente x negative. Fenomenele
menionate conduc la diferite rezultate eronate, n funcie de mrimea
argumentului negativ x.
atribuie e 2.718281828459
atribuie IndRel 1
ct timp ( IndRel = 1 ) execut
scrie x =
citete x
atribuie sum 1
atribuie trm 1
atribuie n 0
atribuie fract abs( x fix(x) )
atribuie m fix( abs (x) )
atribuie olds sum
atribuie n n + 1
atribuie trm trm * fract/n
atribuie sum sum + trm
ct timp ( sum ~= olds ) execut
atribuie olds sum
| atribuie n n + 1
| atribuie trm trm * fract/n
| atribuie sum sum + trm

dac ( x >= 0 ) atunci
atribuie f sum * ( e^m )
| altfel
| atribuie f 1 / ( sum * (e^m ) )

scrie nr.iter. = n, f = f
atribuie fx exp(x)
scrie fx = fx

1.5

Probleme propuse

27

scrie 1=reluare; 0=nu :


citete IndRel

Observaii:
1. abs este numele funciei MATLAB pentru calculul valorii absolute.
2. fix este numele funciei MATLAB pentru calculul parii ntregi a unui
numr real.
3. exp este numele funciei MATLAB pentru calculul exponenialei.
4. ^ este notaia MATLAB pentru operaia de ridicare la putere.
5. ~= este notaia MATLAB pentru operatorul relaional diferit de.
6. >= este notaia MATLAB pentru operatorul relaional mai mare sau
egal.
7. S se analizeze i explice diferenele dintre algoritmii descrii la
exerciiile E1.3 i E1.4.
8. Programul se va rula pentru datele de intrare precizate la exerciiul
E1.3. S se interpreteze rezultatele obinute, comparnd cu cele
rezultate la exerciiul anterior.
E1.5 Se consider ecuaia algebric de gradul al -II-lea :
a z 2 + b z + c = 0; a , b, c ,
cu soluiile generale:

z1 = z1r + j z1i ;
z 2 = z 2r + j z 2i , j 2 = 1

Aa cum s-a prezentat n Exemplul 1.12, la rezolvarea numeric a acestui


tip de ecuaii pot apare o serie de probleme care afecteaz, pe de o parte,
precizia calculelor i, pe de alt parte, posibilitatea efectiv de calcul prin
apariia unor depiri n virgul mobil. n aceste condiii se propune un
algoritm care ncearc s depeasc dificultile menionate.
S se realizeze, ntr-un limbaj de programare (de exemplu MATLAB), un
program pentru urmtorul algoritm, descris parial n limbajul pseudocod.
Programul va conine etapele menionate n continuare:
1. Introducere coeficieni ecuaie, n ordinea descresctoare a puterilor
lui z, n variabilele a, b, c, respectiv.
2. Calcul soluii dup urmtorul algoritm:

dac ( a = 0 ) atunci
dac ( b = 0 ) atunci

atribuie z1r 0

28

1.

Calculul n virgul mobil

|
atribuie z1i 0

|
atribuie z2r 0

|
atribuie z2i 0

| altfel

|
atribuie z1r 0

|
atribuie z1i 0

|
atribuie z2r -c/b

|
atribuie z2i 0

| altfel
|
dac ( c = 0 ) atunci

atribuie z1r 0

|
atribuie z1i 0

|
atribuie z2r - b/a

|
atribuie z2i 0

| altfel

|
atribuie bp b/2

|
dac ( abs( bp) >= abs(c) ) atunci

|
atribuie e 1 (a/bp) * (c/bp)

|
| atribuie d sqrt( abs( e)) * abs(bp)

|
| altfel

|
| atribuie e a

|
|
dac ( c < 0 ) atunci

|
| atribuie e -a

|
|

|
| atribuie e bp * ( bp/abs(c) ) - e

|
| atribuie d sqrt( abs( e)) * sqrt( abs(c) )

|
dac ( e >= 0 ) atunci

|
dac ( bp >= 0 ) atunci

|
| atribuie d -d

|
|

|
| atribuie z1r ( - bp + d )/a

|
| atribuie z1i 0

|
| atribuie z2r 0

|
|
dac ( z1r ~= 0 ) atunci

|
| atribuie z2r ( c/z1r )/a

|
|

|
| atribuie z2i 0

|
| altfel

1.5

Probleme propuse

29

|
| atribuie z1r - bp/a

|
| atribuie z1i abs( d/a )

|
| atribuie z2r z1r

|
| atribuie z2i -z1i

scrie z1 = z1r, + , z1i, *j


scrie z2 = z2r, + , z2i, *j
3. Calcul rdcini polinom de gradul doi, folosind funcia MATLAB
roots (a se vedea observaia 2 care urmeaz). Rezultatele se afieaz.
4. Reluare program, dac se dorete, de la punctul 1.
Observaii:
1. Se folosesc urmtoarele funcii MATLAB: abs (calculul valorii
absolute), sqrt (calculul funciei radical), roots (calculul rdcinilor
unui polinom).
2. Funcia MATLAB: roots
Scop: calculul rdcinilor unui polinom
Apel:
w = roots ( v );
Parametri formali
i. Intrare: v coeficienii polinomului n ordinea
descresctoare a puterilor. Dac polinomul este de
grad n:
v(1) z n + v(2) z n 1 + + v(n ) z + v(n + 1) ,
atunci vectorul linie v conine:
v = [ v(1) v(2) ... v(n) v(n+1) ]
ii. Ieire: w vector cu rdcinile calculate.
3. Programul se va rula pentru urmatoarele date de intrare:
a
0.
0.
0.
3.
1.
1.
1.
1.
6.

b
0.
0.
2.
1.
5.
0.
1.
-1.e+5
5.

c
0.
1.
1.
0.
6.
1.
1.
1.
-4.

30

1.

Calculul n virgul mobil

6.e+30
1.
1.

5.e+30
-4.
-4.

-4.e+30
4.
3.99999999

E1.6 Se consider o funcie de variabil real F : , pentru care se


cunosc valorile pe nodurile (echidistante sau nu):
a = X1 < X2 < ....< Xn = b ; a, b - numere reale ;
Fi = F(Xi) ; i = 1,...,n.
Se dorete reprezentarea grafic a punctelor (Xi, Fi), i=1,...,n ntr-un
sistem rectangular de axe, pe display-ul calculatorului. n afara de
reprezentarea grafica, propriu-zis, pe display mai pot fi afiate o serie de
informaii numerice referitoare la mrimile reprezentate. De asemenea se
pot reprezenta dou sau mai multe funcii reale pe acelai ecran.
Se consider funcia f : [1,1] (0,1] cunoscut n analiza numeric sub
denumirea de "funcia Runge", n legatur cu problema aproximrii
numerice a funciilor (tratat ntr-un capitol urmtor):

f (x) =

1
, 1 x 1.
1 + 25 x 2

n cadrul acestui exerciiu, se vor realiza mai multe reprezentri grafice


ale funciei, pe intervalul [-1,1], cu diveri pai de discretizare. Astfel, se
consider reeaua de puncte echidistante :
-1.= X1 < X2 <....< Xi <...< Xn = 1.
Xi = X1 + (i-1)*h; i = 1,2,,n
unde h este pasul de discretizare: h = (Xn-X1)/(n-1).
S se realizeze, ntr-un limbaj de programare (de exemplu MATLAB), un
program pentru reprezentarea grafic a funciei Runge, cu diferii pai de
discretizare. Valorile funciei vor fi calculate cu ajutorul unei funcii
externe - utilizator, care va fi descris separat n cele ce urmeaz (a se
vedea observaia 1). Programul va conine etapele menionate n
continuare:
1. Precizare interval de evaluare a valorilor funciei: [a,b], de exemplu:
a = -1. , b = 1.
2. Introducere numere de puncte, n variabilele np1 i, respectiv, np2,
(np1 < np2), n care vor avea loc evalurile funciei.
3. Calcul pai de discretizare: h1 = (b-a)/(np1-1); h2 = (b-a)/(np2-1).
4. Generare seturi de puncte pentru reprezentarea grafic:
abscise n vectorul x1, coninnd elemente cu valori de la a la b,
cu pasul de cretere h1;

1.5

Probleme propuse

31

abscise n vectorul x2, coninnd elemente cu valori de la a la b,


cu pasul de cretere h2;
ordonate n vectorul y1, coninnd valorile funciei Runge,
evaluat n punctele din vectorul x1 (descriere pseudocod):
execut y1 = FRUNGE (x1);
ordonate n vectorul y2, coninnd valorile funciei Runge,
evaluat n punctele din vectorul x2 (descriere pseudocod):
execut y2 = FRUNGE (x2);
5. Reprezentare cu grafice suprapuse: se reprezint perechile de puncte
(x1,y1) i, respectiv, (x2,y2), n acelai grafic.
6. Reluare program cu alte valori pentru numerele de puncte de
discretizare, daca se dorete, de la punctul 2.
7. Reluare general program, daca se dorete, de la punctul 1.
Observaii:
1. Programul apeleaz funcia utilizator FRUNGE. O modalitate de
descriere a acesteia n limbajul MATLAB (crend un fiier utilizator
cu numele FRUNGE.m), este:
function y = FRUNGE ( x )
%
n = length(x);
y = ones(1,n) ./ ( 1 + 25 * x .^2 );
%
unde length reprezint funcia pentru determinarea numrului de
elemente ale unei matrice, iar ones este funcia pentru generarea unei
matrice cu elemente egale cu 1, de dimensiuni indicate (numr linii,
numr coloane). Apelul funciei, n limbajul MATLAB, este:
y = FRUNGE ( x );
2. Programul se va rula pentru urmtoarele date de intrare:
np1 = 5 np2 = 100 ;
np1 = 6 np2 = 100 .
3. Programul pune n eviden:
evaluarea/reprezentarea neadecvat a funciilor, dac pasul de
discretizare/evaluare este ales prea mare;
aproximarea liniar a funciilor, cunoscnd un ir de valori (x,y),
ntr-un interval dat (reprezentarea grafic n np1 puncte).

32

1.5

1.

Calculul n virgul mobil

Probleme propuse

P1.1 Se consider un numr ntreg Z cu 12 cifre n baza de numeraie zece,


Z = 314159265358 . n baza de numeraie doi, acest numr are 38 de cifre
binare. Se consider un calculator pentru care numerele sunt reprezentate
conform standardului IEEE. Acest numr se poate reprezenta exact,
aproximativ sau nu se poate reprezenta ca:
(a) ntreg, utiliznd 16 poziii binare?
(b) ntreg, utiliznd 32 poziii binare?
(c) real n simpl precizie?
(d) real n dubl precizie?
Justificai rspunsul.
P1.2 Se consider urmtoarele relaii de calcul:
t = 0.1
n = 1 / 10
e = n / 10 n * t
S se implementeze aceste expresii ntr-un limbaj de programare, cu
afiarea valorilor atribuite variabilelor din membrul stng, i s se explice
rezultatele obinute.
P1.3 Se consider urmtorul algoritm descris n limbaj pseudocod:
atribuie eps 1
ct timp ( eps > 0 ) execut
scrie eps=, eps
atribuie eps eps/2

S se precizeze ce semnificaie are ultima valoare tiprit? S se verifice


rspunsul dat prin implementarea algoritmului ntr-un limbaj de
programare.
P1.4 S se descrie, n limbaj pseudocod, algoritmul pentru determinarea
epsilonului main pentru operaia de scdere. S se implementeze, ntrun limbaj de programare, algoritmii pentru calcul epsilonului main
pentru operaiile de adunare i scdere. S se compare rezultatele
obinute.
P1.5 Se consider urmtorul algoritm descris n limbaj pseudocod:
atribuie eps 1

1.5

Probleme propuse

33

atribuie k_bit 0
atribuie eps1 eps+1
ct timp [( eps1 > 1 ) i ( eps1 eps = 1 )] execut
atribuie eps eps/2
atribuie k_bit k _ bit + 1
atribuie eps1 eps + 1

dac ( eps1 eps = 1 ) atunci


atribuie eps 2 eps

scrie eps = , eps


scrie k_bit = , k_bit
S se precizeze ce semnificaie au valorile tiprite pentru variabilele eps
i k_bit. S se verifice rspunsul dat prin implementarea algoritmului dat
ntr-un limbaj de programare.
P1.6 Calculul aproximativ al valorii unei funcii, de exemplu e x , se bazeaz
pe evaluarea unor serii infinite, cu termeni descresctori n modul.
Algoritmul general folosit reflect precizia mainii de calcul, calculele
oprindu-se n momentul n care un termen de sumat nu mai are influen
asupra sumei pariale, calculate la un anumit moment dat. Descrierea
principial, n limbaj pseudocod, a unui astfel de algoritm este
urmtoarea:
scrie x =
citete x
atribuie sum _ n 1
atribuie sum _ v 0
atribuie k 0
ct timp ( sum _ v sum _ n ) execut
atribuie k k + 1
* calculeaz term ca funcie de k i x
atribuie sum _ v sum _ n
atribuie sum_n sum_v+ term

atribuie f sum _ n
scrie funcie calculat (x) = , f
n descrierea anterioar, f reprezint valoarea aproximativ a expresiei de
evaluat.

34

1.

Calculul n virgul mobil

(a) Folosind algoritmul general, s se descrie, n limbaj pseudocod,


algoritmul pentru calculul seriei infinite divergente:
S = 1 + 1/ 2 + 1/ 3 + 1/ 4 + + 1/ n + .
(b) S se implementeze ntr-un limbaj de programare algoritmul obinut
la punctul (a) i s se execute programul obinut.
(c) S se explice de ce seria dat nu este divergent atunci cnd aceasta
este evaluat cu un calculator numeric.
(d) S se completeze programul obinut la punctul (b), calculnd seria de
la punctul (a) prin evaluarea de la dreapta la stnga (pornind de la cel
mai mic termen semnificativ pentru sum).
(e) S se compare rezultatele de la punctele (b) i (d). S se explice
diferenele, dac acestea exist.
P1.7 Se consider calculul funciei sin(x) utiliznd exprimarea acesteia drept o
serie (infinit) de puteri:
x3 x5 x7
sin( x ) = x
+

+ ... ,
3!
5!
7!
i urmtorul algoritm descris n limbajul pseudocod:
scrie x =
citete x
atribuie sinx 0
atribuie term x
atribuie k 1
ct timp ( sinx + term ~= sinx ) execut
atribuie sinx sinx + term
atribuie term - (x^2) / ( (k+1)*(k+2) ) * term
atribuie k k + 2

atribuie f sinx
scrie funcie calculat sin(x) = , f
S se explice motivul pentru care ciclul cu test iniial (ct timp - execut)
se parcurge de un numr finit de ori.
S se rspund la urmtoarele ntrebri, variabila x lund succesiv
valorile / 2, 11 / 2, 21 / 2, 31 / 2 , implementnd algoritmul ntrun limbaj de programare:
(a) Ct de precis este rezultatul calculat?
(b) Care este numrul de termeni folosii din seria de puteri?
(c) Care este cel mai mare termen folosit din seria de puteri?

1.5

Probleme propuse

35

Implementnd algoritmul prezentat n mediul de programare MATLAB,,


s se compare rezultatele astfel obinute cu cele furnizate prin utilizarea
funciei MATLAB sin, corespunztoare valorilor precizate pentru
argumentul x. S se explice diferenele obinute i, dac este cazul, s se
corecteze algoritmul astfel nct diferenele ntre cele dou variante
(funcia MATLAB sin i algoritmul corectat) s fie ct mai mici posibile.

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