Analisi degli errori Sistemi di numerazione I sistemi di rappresentazione numerica sono posizionali: ogni cifra occupa una posizione corrispondente ad una potenza della ase del sistema adottato. Sistema decimale (ase 0) 058,5 0 4 + 0 0 3 + 0 + 5 0 + 8 0 0 + 5 0 - Sistema inario (ase ) (000,) 4 + 0 3 + 0 + + 0 0 + - (8,5) 0 Sistema esadecimale ( ase 6) (A) 6 6 + 0 6 + 6 0 (673) 0 Le cifre di questi sistemi sono : decimale: 0,,, 9 inario:0, esadecimale: 0,,, 9, A, B, C, D, E, F Quindi, scelta una ase ogni reale a può essere scritto: a ± (amn m + am-n m- + + a0 + a-n - + ) 0 a i N - Tale rappresentazione è unica tranne se la parte frazionaria contiene infinite cifre consecutive a-k N -. Una rappresentazione equivalente è quella di considerare il nuovo numero ottenuto sopprimendo la successione e aggiungendo un'unità all'ultima cifra rimasta. Per esempio nel sistema decimale 0, 7999 9 e 0, 73 rappresentano lo stesso numero. Formazione numerica - 4.0.0 - Appunti y Daisy83
Per la rappresentazione dei numeri in diverse asi si ha il seguente teorema: Sia N,, R, 0 e Z, {a i} i,, a i N : ± i a i i e 0 a i -, a 0, a i definitivamente - Rappresentazione numerica in un calcolatore Poiché in un calcolatore lo spazio di memoria è finito, la sommatoria precedente può estendersi fino a t (numero finito): t ± a i i i e t < L e U Aiamo due tipi di rappresentazione: Rappresentazione in virgola fissa Sono fissati il numero di cifre N che rappresenta il numero e il numero di cifre prima e dopo la virgola N, N : N N + N Ad esempio: N 0, N 4, N 6 7,35 007 35000 0,04 0000 04000 Quindi, se N sono le posizioni di memoria ed una è per il segno, N - k - per la parte intera e k per quella decimale, si ha: N s ( ) k j dove è la ase ed s è scelto in ase al segno di. 0 a j j Formazione numerica - 4.0.0 - Appunti y Daisy83
Rappresentazione in virgola moile In questo caso la posizione della virgola di un numero decimale non è fissa ma è data dall'esponente. R si può scrivere come: (-) s m e con m R Tale rappresentazione non è unica. Infatti: m e m' e- m'' e+ m m' m, m'' Tale rappresentazione si dice normalizzata se: - m < In tal caso chiamiamo m mantissa ed e esponente (caratteristica) di. (-) s m e, m.aa at Lo spazio riservato ad ogni R è: t N, 0 a i -, 0 m t -, L < e < U s e m L'insieme dei numeri la cui mantissa è rappresentaile da t cifre e la cui caratteristica è compresa tra L ed U, che sono interi che variano per ogni calcolatore è detto insieme dei numeri macchina. F F(t,, L, U) {0} { R : t ± a i i i e } poiché 0 ha una rappresentazione particolare. F è un insieme finito e numeraile: card F + ( - ) t- (U - L + ) Per memorizzare e spesso si agisce nel seguente modo: fissato L si memorizza e * e - L che è sempre non negativa, tenendo presente che il numero è memorizzato a meno di L. Formazione numerica - 4.0.0 - Appunti y Daisy83 3
In un calcolatore a 3 it si hanno 3 it per la mantissa, it per il segno e 8 it per l'esponente: L -7, U +7, -7 e 7 0 e * 55. Il più grande e il più piccolo numero rappresentaili sono: min (.) -7-7 -8 ma (. ) 7 8 3 3 i 3 infatti: (. ) ( ) i 3 Camiando l'ultimo it della mantissa per min si ha: 3 7 + min + -50 che è una differenza molto piccola. Camiando l'ultimo it della mantissa per ma si ha: ((. ) - -3 ) 7 ma - 04 che è una differenza molto grande. Quindi è meglio rappresentare numeri piccoli. Un numero decimale per essere rappresentato nel computer, viene convertito in inario. Tale conversione può comportare una rappresentazione approssimata. Per vedere ciò vediamo come si opera tale conversione. Formazione numerica - 4.0.0 - Appunti y Daisy83 4
Si hanno due casi: ) numero maggiore di. Si divide per due: se c'è il resto si mette altrimenti 0 e si assegnano potenze di due crescenti. Esempio: 37 8 9 4 0 0 0 0 3 0 4 5 (000) (37) 0 ) numero minore di. Si divide per /, ovvero si moltiplica per. Se il prodotto è minore di uno si ha 0 altrimenti. Quando il numero diventa maggiore di uno si sottrae procedendo come prima. 0, 0,4 0,8,6 0,6, 0, 0,4 0,8,6 0,6 0-0 - -3-4 0-5 0-6 -7-8 (0,) 0 ( 00) Si ha quindi una rappresentazione finita in decimale e una rappresentazione approssimata in inario: errore di arrotondamento. Formazione numerica - 4.0.0 - Appunti y Daisy83 5
Conversione da ase 0 a ase qualunque Sia n un numero in ase 0, vogliamo convertirlo in un numero in ase N. Sia n (aj j ) + (aj- j- ) + + (a ) + (a0 0 ) (aj aj- a a0) Dividendo n per si ha: n a (a j j- ) + (a j- j- ) + + (a 0 0 ) + dove n 0 < n n n 0 + a 0 Quindi a 0, l'ultima cifra della rappresentazione, è il resto intero di n/. Per ottenere la penultima cifra si divide n 0/: n 0 (aj j- ) + + (a 0 ) + a n + a Il procedimento si arresta ad aj tale che nj 0. Esempio: 74 (a9a8a7 aa0) (0000) Nell'aritmetica in virgola moile (floating point) si ha il prolema: dato R come scegliere fl() F {0} { R : t ± a i i i e } Si fanno i seguenti casi: ) e < L underflow fl() 0 "warning" ) e > U overflow segnale di errore e arresto del programma. Formazione numerica - 4.0.0 - Appunti y Daisy83 6
3) L e U i) a m 0, m t + F ii) F, fl() e si ha: a) chopping o troncamento: si esclude la parte destra della t-esima cifra fl() t ± a i i e fl() < ) rounding o arrotondamento a a t + e ± +... + + +... t t+ a fl() a a ± +... + α + t - t e t - t a con αt fl() a t k + 0 a t + a < / t+ cioè si aggiunge t e si tronca alla t-esima cifra. Poiché le mantisse dei numeri macchina p, che sono - p <, non hanno più di t cifre, la distanza tra le due mantisse di macchina consecutive è -t. Quindi se p, p >0, se p è consecutivo a p si ha: p p + -t Quindi con a) tutti tali p vengono sostituiti con p e quindi p p < -t, invece con ) tutte t le mantisse in ( p, p + ) sono sostituite con p e tutte le mantisse in ( p + t, p ) con p. Pertanto se p è la mantissa associata a p si ha: p p t. Formazione numerica - 4.0.0 - Appunti y Daisy83 7
Quindi, per l'errore assoluto si ha: fl( ) t e t e chopping rounding Per l'errore relativo: fl() t + t + chopping rounding L'errore relativo generalmente è più importante. Calcolo A: 0,5 0-4, c 0,4 0-4 EA 0, 0-4 ER 0, 0% Calcolo B: 5000, c 4950 EA 50 E R 0,0 % Si definisce precisione o epsilon di macchina il sup dell'errore relativo, cioè: ε M t + t + chopping rounding Non ha senso cercare delle approssimazioni con precisione inferiore ad ε M. Formazione numerica - 4.0.0 - Appunti y Daisy83 8
Distriuzione dei numeri in floating point I numeri in floating point non sono equispaziati ma si addensano in prossimità del più piccolo numero rappresentaile. La spaziatura tra due, F è almeno β - εm ed al più vale ε M se ε M β -t All'interno dell'intervallo [β e, β e+ ] i punti sono invece equispaziati e la loro distanza è β e-t. Quindi ogni volta che si aumenta (o diminuisce) e di una unità si ha un aumento (o una diminuzione) di un fattore β della distanza tra numeri consecutivi. Per questo si prediligono asi piccole. Il fenomeno (woling precision) ha quindi un andamento oscillatorio: Altra fonte di errori: il risultato di operazioni aritmetiche non può essere un numero di macchina. fl(), y fl(y) se: op y F si deve definire op il cui risultato appartiene ad F: op y fl( op y) valida se non c'è overflow. Ad esempio nel caso della somma: si rendono uguali gli esponenti, si sommano le mantisse in accumulatore con m cifre, si aggiustano gli esponenti. Ciò può portare alla non validità delle proprietà commutativa, distriutiva ed associativa della somma e della moltiplicazione. Formazione numerica - 4.0.0 - Appunti y Daisy83 9
Esempio: 4 cifre per la mantissa 0,5055 0 4, i 0,4000 0 0 i,, + 0,5055 0 4 + 0,00004 0 4 0,50554 0 4 0,5055 0 4 i i e quindi i 0,5055 0 4 i Se invece si fa: i 0,4 0 e i i + i i 0,5055 0 4 + 0,0004 0 4 0,5059 0 4 i Per sommare molti numeri dello stesso segno si devono sommare dal più piccolo al più grande per minimizzare la propagazione degli errori. Formazione numerica - 4.0.0 - Appunti y Daisy83 0
Diagramma di flusso per il calcolo di ε ε è il più piccolo numero per cui si ha + ε > ε i ε/ v + ε si v > ε ε + STOP Codice fortran: PROGRAM EPSMAC C CALCOLO APPROSSIMATO DI ε EPS EPS EPS / EPS EPS + IF (EPS.GT.) GOTO EPS + EPS END Condizionamento e stailità Formazione numerica - 4.0.0 - Appunti y Daisy83
Consideriamo il prolema: trovare tale che F() d, dove d è il dato o i dati da cui dipende la soluzione, ed F, relazione funzionale che lega e d. Diremo che tale prolema è en posto se, per un certo dato, la soluzione esiste, è unica e dipende con continuità dai dati. La dipendenza continua dei dati significa che piccole perturazioni su dati danno luogo a piccole variazioni della soluzione, dove "piccolo" può essere inteso in senso relativo o assoluto. D'altronde aiamo visto che si commettono errori sia nel rappresentare i numeri reali, sia nell'esecuzione di operazioni aritmetiche. Nascono a questo punto due prolemi: ci si chiede ) alterando i dati del prolema di quanto si altera la soluzione; ) come si propagano gli errori. Il primo prolema è connesso con la dipendenza continua dai dati della soluzione e può essere stimato con il numero di condizionamento del prolema, numero che non dipende dall'uso dell'aritmetica finita del calcolatore ma dal tipo di prolema. Supponiamo di alterare di δd i dati del prolema precedente e ci chiediamo di quanto si altera la soluzione: d + δd + δ Diremo numero di condizionamento relativo: K δ δd / / d Se 0, d 0 si calcola il numero di condizionamento assoluto: K ASS δ / δd Se K è grande il prolema è mal condizionato. Se un prolema è en posto ma K è grande asta riformulare il prolema. Il secondo prolema dipende dalla stailità dell'algoritmo. Ricordiamo che per algoritmo intendiamo una successione di passi che trasformi un vettore di dati in un corrispondente output. Ad ogni prolema numerico si possono associare più algoritmi. Un algoritmo è staile se la propagazione degli errori, dovuti all'aritmetica di macchina, è limitata. Un algoritmo è più staile di un altro se in esso l'influenza degli errori è minore. Quale delle quattro operazioni può provocare una perdita di precisione? Aiamo detto che i risultati di operazioni aritmetiche tra numeri di macchina in generale non sono Formazione numerica - 4.0.0 - Appunti y Daisy83
numeri di macchina. L'operazione di macchina associa a due numeri di macchina un terzo numero di macchina. Indichiamo con + / le operazioni di macchina: a + fl( a + ) ( a + )( + ε ) a - fl( a - ) ( a - )( + ε ) a fl( a ) ( a )( + ε 3) a / fl( a / )( + ε 4) dove a fl(a) e fl(), εi eps εm Esaminiamo l'errore relativo: [ ] ( op ) ( op ) ( op ) ( + ε ) op + ε prodotto: + ε + ε divisione: / op ( ) ( + ε ) ( ) ( ) ε + ε + ε ε ε ε ε + ε ε ε ε somma algerica: ( ) [ ( ) ( )] + + ε + + ε ε ε + + + i + per + 0 Formazione numerica - 4.0.0 - Appunti y Daisy83 3
Errore assoluto ed errore relativo nelle quattro operazioni: δ * - * δ ε * * * operazione err. ass. err. rel. + δ + δ ε + ε + + - δ - δ ε + ε * δ - δ ε + ε δ / δ ε - ε Osservazioni: + e - : nessun prolema per l'errore assoluto, ma si ha un errore relativo grande se * : ok per l'errore relativo, l'errore assoluto dipende dall'ordine di grandezza dei fattori /: ok per l'errore relativo, l'errore assoluto è grande se 0 Cancellazione Esempio: f() + con sei cifre decimali per la mantissa ~ f() f() 0,440 0,444 0,54340,54347 0 4,99000 4,98756 0 3 5,8000 5,8074 0 4 50,0000 49,9988 0 5 00,000 98,3 Le cifre sottolineate sono affette da errore. Per 0 5 l'informazione è persa. Per evitare l'errore commesso nel calcolare la differenza di numeri vicini si può procedere così: f() ( ) ( + )( + + ) + + + Altro esempio: p() a + + c + + + + + Formazione numerica - 4.0.0 - Appunti y Daisy83 4
4ac, a + 4ac a Algoritmo staile: a,,c >0 + 4ac 4ac a a c a c a Stampa, STOP Schema di Hörner (nested multiplication) Si vuole eseguire il calcolo di: f() a 3 + + c + d. Sono necessarie tre somme e sei moltiplicazioni per un totale di 9 operazioni floating point (9 flops). In generale per f() an n + an- n- + + a + a0 ricorrono n somme e n ( n + ) n moltiplicazioni, per un totale di n + ( n + ) n( n + 3) n flops Se invece si applica lo schema di Horner: f() a 0 + (a + (a + + (a n- + a n) )) otteniamo n somme e n moltiplicazioni: #flops n Formazione numerica - 4.0.0 - Appunti y Daisy83 5
Formazione numerica - 4.0.0 - Appunti y Daisy83 6