Documente Academic
Documente Profesional
Documente Cultură
An 01
An 01
0. Erori
13.5 = 1 2 3 + 1 2 2 + 0 2 + 1 2 0 + 1 2 1 = 1101.1 Reprezentarea numerelor n calculator (reprezentarea intern) se face pe un numr finit de poziii, n , numit lungimea cuvntului, care este fixat la construcia calculatorului. Pentru precizii mai bune, unele calculatoare au posibilitatea reprezentrii numrului pe 2n, 3n , poziii (reprezentare pe dublu cuvnt, triplu cuvnt, ). Pe cele n poziii ale unui cuvnt, un numr poate fi reprezentat n virgul fix (proprie numerelor ntregi sau numerelor subunitare) sau n virgul mobil. Majoritatea tipurilor de calculatoare numerice folosesc pentru calcule tiinifice reprezentarea numerelor n virgul mobil. n aceast reprezentare, poziia virgulei zecimale nu este fix. Orice numr real x se poate scrie sub forma x = a 10b sau x = a 2b cu a < 1 i b Z ; a se numete mantisa numrului real x, iar b exponentul. Reprezentarea n virgul mobil este normalizat dac prima cifr a mantisei este nenul, deci dac a 10 1 , respectiv a 2 1 . n acest caz reprezentarea este unic. Cifrele semnificative ale unui numr sunt cifrele mantisei, nelund n seam zerourile care le preced.
Exemplul Reprezentarea normalizat, n virgul mobil a numrului n baza 10 x = 13.5 este: 0.135 10 2 = 0.13510 2 , indicele 10 artnd c reprezentarea este n baza 10. n acest caz mantisa este a = 0.135, iar exponentul b =2. n baza 2, acelai numr are reprezentarea normalizat n virgul mobil 0.110112100 = 0.11011 2 4 , avnd mantisa a = 0.11011 i exponentul b = 100.
Pentru orice calculator numeric exist numerele fixe t i e care reprezint numrul de cifre ale mantisei, respectiv ale exponentului unui numr real ce poate fi reprezentat n calculatorul respectiv (n = t + e). Numerele t i e determin
Erori
mpreun cu baza de numeraie (10 sau 2) o mulime finit de numere reale F R care pot fi reprezentate exact n calculator.
n general, pentru t fixat, dac x F , rd (x ) se poate determina astfel. Se aduce x la forma normalizat x = a 10b , cu a 10 1 , adic a = 0.1 2 ... i i +1... , 0 i 9 , 1 0 . Se determin
def 0. ... , dac 0 t +1 4 a' = 1 2 t , t 0.1 2 ... t + 10 , dac t +1 5 adic t crete cu 1 dac t +1 5 i se renun la celelalte zecimale ncepnd cu t +1 .
~ rd ( x ) x 5 10 (t +1) 5 10 t . x a ~ Notm eps = 5 10 t . Dac rd ( x ) = x(1 + ) , atunci, din inegalitatea de mai sus
rezult eps . Numrul real eps se numete precizia calculatorului. Pentru rotunjirea n sistemul binar se procedeaz analog. Se aduce x F la forma normal x = a 2b cu 2 1 a < 1 i a = 0.1 2 ... i i +1... cu i = 0 sau 1 i 1 = 1 .
dac t +1 = 0 0.1 2 ... t , ~ , iar rd (x ) = sgn ( x ) a '2 b . n Se determin a' = t 0.1 2 ... t + 2 , dac t +1 = 1
~ ~ n cazul n care rd (x ) F , atunci rd (x ) este chiar rd (x ) . Deoarece numrul poziiilor pentru exponentul e este finit, exist , din pcate, numere ~ x F pentru care rd (x ) F .
Exemplul 2. Considerm t = 4 i e = 2. Atunci ~ a) rd (0.3179410110 ) = 0.317910110 F ~ b) rd (0.999971099 ) = 0.100010100 F ~ c) rd (0.01234510 99 ) = 0.123510 100 F ~ d) rd (0.5432110 110) = 0.543210 110 F n cazurile a) i b) exponentul pozitiv este prea mare ca s poat fi reprezentat pe spaiul alocat (e = 2). n situaiile acestea se spune c avem depire superioar a exponentului. n cazul b) depirea superioar a exponentului apare abia dup rotunjire. n exemplele c) i d) are loc depire de exponent inferioar, adic exponentul negativ este prea mic pentru a putea fi reprezentat pe spaiul alocat. n aceste dou situaii, depirea inferioar a exponentului poate fi prevenit definind rd (0.01234510 99 ) = 0.012310 99 F (reprezentarea nu mai este normalizat) i rd (0.5432110 110 ) = 0 F . Atunci rd nu satisface egalitatea rd (x ) = x(1 + ) , deci eroarea relativ poate fi mai mare ca eps. Situaiile de depire de exponent superioar sau inferioar sunt tratate de calculatoarele numerice ca fiind excepii. ~ n mod obinuit, rd (x ) se definete prin egalitatea rd ( x ) = rd (x ) .
n continuare, innd seama c depirile de exponent superioare i/sau inferioare nu sunt frecvente, vom considera cazul ideal e = i
Erori
x s y
nu fie elemente ale mulimii F, chiar dac operanzii x i y F . Vom nota cu + , , , / operaiile n virgul mobil corespunztoare operaiilor aritmetice care sunt definite astfel:
x + y = rd ( x + y ) , x y = rd ( x y ) , x y = rd ( x y ) , x / y = rd ( x / y ) , deci x + y = ( x + y )(1 + 1 ) , x y = ( x y )(1 + 2 ) , cu i eps, i = 1,4 . x y = ( x y )(1 + 3 ) , x / y = ( x / y )(1 + 4 ) . Aceste operaii n virgul mobil nu au proprietile binecunoscute ale operaiilor aritmetice. De exemplu: eps x , unde x, y F , iar B este baza de 1) x + y = x , dac y < B numeraie. Precizia mainii eps ar putea fi definit ca fiind cel mai mic numr g F pentru care 1 + g > 1 , adic eps = min{ g F 1 + g > 1, g > 0} . 2) Asociativitatea nu se mai pstreaz, aa cum va rezulta din urmtorul exemplu.
Exemplul 3. Fie a = 0.2337125810 4 , b = 0.33678429 10 2 , c = 0.3367781110 2 .
def def def
def
pentru orice x, y F
a + b + c = 0.2337125810 4 + 0.61800000 10 3 =
+ conduce la:
Dac E este o expresie aritmetic, va rezulta din context cum se evalueaz E. Dac este nevoie se pot folosi paranteze care s precizeze ordinea operaiilor. Vom nota cu fl (E ) valoarea expresiei E obinut din calculul n virgul mobil. De exemplu:
fl (x + y ) = x + y
def
fl ( x + ( y + z )) = x + y + z fl ((x + y ) + z ) = x + y + z
def
def
Erori
pentru restul calculelor. Mulimea operand final va consta din rezultatele dorite y1 , y 2 ,..., y m . n concluzie, o operaie corespunde unei transformri a mulimii operand. Scriind mulimile operand consecutive ca vectori coloan x (i ) 1 (i ) (i ) x 2 x = R ni , putem asocia fiecrei operaii elementare o funcie vectorial M (i ) xn i
x (0 ) = x , unde x (i +1) este o reprezentare vectorial a mulimii operand transformate. Fiind dat un algoritm, irul su de operaii elementare d natere unei descompuneri a lui ntr-un ir de funcii elementare (i ) : Di Di +1 , i = 0, r ,
Dj R
nj
( )
, = (r ) o (r 1) o ... o (0 ) , D0 = D , Dr +1 R nr +1 = R m .
Exemplul 1. Pentru (a, b, c ) = a + b + c s evideniem doi algoritmi: a) Fie = a + b i y = c + . Atunci, descompunerea de mai sus este:
(0 ) (a, b, c ) =
a + b R 2 , (1) (u , v ) = u + v R , (a, b, c ) = (1) (0 ) (a, b, c ) . c b) Fie = b + c i y = a + . n acest caz: a R 2 , (1) (u , v ) = u + v R , (a, b, c ) = (1) (0 ) (a, b, c ) . b + c
(0 ) (a, b, c ) =
Un argument pentru alegerea unui algoritm l constituie propagarea erorilor n aritmetica virgulei mobile. S analizm algoritmii a) i b) din exemplul de mai sus pentru intrrile numerice din Exemplul 3 al seciunii precedente. n cazul a) = fl ( a + b) = ( a + b)(1 + 1 ) , ~ = fl ( + c ) = ( + c )(1 + ) = [( a + b)(1 + ) + c](1 + ) = y 2 1 2
a+b = (a + b + c) 1 + 1 (1 + 2 ) + 2 . a+b+c ~ y y a+b = 1 (1 + 2 ) + 2 , sau, dup y Eroarea relativ a lui ~ , y = y a+b+c a+b 1 + 1 2 . renunarea la termenii neliniari n avem y a+b+c
a+b este critic; n funcie de care dintre numerele a + b a+b+c sau b + c este mai mic, este mai bine s se procedeze via (a+b)+c dect a+(b+c) pentru a calcula a+b+c. Metoda de mai sus, de studiu a propagrii erorilor, neglijnd termenii de ordin superior, se poate extinde, conducnd la analiza diferenial a erorilor unui algoritm , pentru a calcula ( x) , dac = (r ) o (r 1) o ... o (0 ) . Pentru aceasta vom investiga cum erorile x asupra datelor de intrare, ca i erorile de rotunjire acumulate de-a lungul algoritmului afecteaz rezultatul final y = (x ) . 1 ( x1 ,..., x n ) m M Fie : D R , ( x) = , D fiind o submulime deschis ( x ,..., x ) n m 1 n a lui R . Presupunem c funciile , i = 1, m , au derivate continue pe D. Fie ~ o x
Factorul
i
valoare aproximativ pentru x. Notm x = ~ x , xi = ~i xi erorile absolute ale lui ~ i respectiv ~i . x x x x ~ x x i , dac xi 0 erorile relative. Fie ~i = i x xi x nlocuind datele de intrare x cu ~ , obinem ~ = (~ ) n loc de y = ( x ) . y x Dezvoltnd n serie Taylor i renunnd la termenii neliniari n xi obinem: n n i (x ) = i (x ) x j , i = 1, m . y x x yi = ~i yi = i (~ ) i ( x ) = ~ j x j x j j =1 j =1 x j
Cantitile
Erori
Dac y i 0, i = 1, m i x j 0, j = 1, n atunci formula pentru propagarea erorilor relative devine: n xj i ( x) yi = xj (1) xj j =1 i ( x) Cantitile
Dac numerele de condiionare au valori (absolute) mari se spune c respectiva problem este ru condiionat, altfel problema este bine condiionat. Pentru problemele ru condiionate, erori relative mici n datele de intrare x, pot cauza erori relative mari n rezultatele y , y = (x ) .
Exempul 3. Pentru y = (a, b, c) = a + b + c avem: a b c y = a + b + c . a+b+c a+b+c a+b+c Aceast problem este bine condiionat dac termenii a, b, c sunt mici n comparaie cu suma lor a+b+c .
Eroarea relativ (1) pentru cteva operaii elementare, n care operanzii x i y sunt nenuli, este dat n tabelul:
x+y xy x y
y x x + y , dac x + y 0 x+ y x+ y
x y x y , dac x y 0 x y x y x +y
x/ y
x
x y
1 x 2
Se observ c la nmulire, mprire i extragere de rdcin ptrat erorile relative ale operanzilor nu se propag puternic n rezultate. Acelai lucru se ntmpl i n cazul adunrii dac cei doi operanzi au acelai semn. Atunci x y numerele de condiionare sunt n (0,1) i o margine a erorii i x+ y x+ y relative este x + y max{ x , y } .
10
Dac operanzii care se adun au semne diferite, atunci cel puin unul dintre x y este mai mare ca 1 i erorile relative numerele de condiionare , x+ y x+ y
cancelarea rezultatului). Pentru descrierea propagrii erorilor de rotunjire ntr-un algoritm dat , vom apela tot la formula y = D ( x) x .
Presupunem c admite reprezentarea = ( r ) o ( r 1) o .... o ( 0) i c rezultatele calculelor pornind de la vectorul datelor de intrare, x = x (0) sunt date de relaiile:
x (i +1) = [ fl ( ( i ) ( ~ ( i ) )) ( i ) ( ~ ( i ) )] + [ ( i ) ( ~ ( i ) ) ( i ) ( x ( i ) )] . x x x
( i ) ( ~ ( i ) ) ( i ) ( x ( i ) ) D ( i ) ( x ( i ) ) x ( i ) x
fl ( (i ) (u )) = rd ( (i ) (u )) ,
(2) (3).
Cum (i ) este o funcie elementar, evaluarea sa n virgul mobil va fi care pe componente devine:
Erori
11
x (1) = D (0) ( x) x + 1 x ( 2) = D (1) ( x1 )[ D (0) ( x) x + 1 ] + 2 . y = x ( r +1) = D ( r ) ...D (0) x + D ( r ) ...D (1)1 + ... + r +1 . Sau dac inem seama de ceea ce am notat cu avem:
(1) (a, b, u ) =
n primul caz avem:
u ; ( 2) ( s, t ) = s t , = ( 2) o (1) o (0) . a b
12
(1) (u , v) = u v 2 , ( 2) (u , v ) = u v , D ( x) = ( 2a,2b) ,
D (1) ( x (1) ) = (1, 2b) , D ( 2) ( x ( 2) ) = (1, 1) ,
1 =
1a 2 0 , E1 = 1 0 0 , 0
a a a 2 (eroarea de rotunjire n deoarece fl ( (0) ( x (0) )) (0) ( x (0) ) = b b virgul mobil apare doar pe prima poziie). Similar 0 0 0 2 2 2 = b 2 , E 2 = 0 , 3 = 3 (a b ) , i eps, i = 1,3. 2 2
a Dac x = , y = 2aa 2bb + a 2 1 b 2 2 + ( a 2 b 2 ) 3 . b n cazul algoritmului 2, avem: a a + b ( 2) (1) 2 2 x = x ( 0) = , x (1) = b a b , x = y = a b ; (u , v) = u v ,
- n algoritmul 2:
( a 2 b 2 )(1 + 2 + 3 ) 3 a 2 b 2 eps.
Cnd selectm un anumit algoritm de calcul pentru un (x ) (cu alte cuvinte, o anumit descompunere a lui n funcii elementare), D rmne neschimbat; matricele jacobiene D (i ) care msoar propagarea rotunjirilor vor fi totui diferite, efectul total al erorilor de rotunjire va fi: D (1) 1 + ... + D ( 2) 2 + r +1 . Un algoritm este numeric mai bun dect alt algoritm pentru calculul lui (x ) , dac pentru o mulime de date x, efectul total al erorilor de rotunjire este mai mic n cazul primului algoritm.