Errori ed aritmetica
finita
a.a. 2014/2015
Prof. Maria Lucia Sampoli
Analisi Numerica
Obbiettivo: dare una risposta numerica ad un problema
matematico mediante un calcolatore digitale

1.
2.
3.
4.
5.

Problema reale
Costruire un modello
Formulare un problema matematico che descrive il modello
Risolvere il problema matematico
Interpretare la soluzione
Non è detto che sia direttamente disponibile la soluzione del
problema matematico
metodi numerici di approssimazione
Efficienza di un metodo numerico

Accuratezza: la soluzione numerica deve essere “vicina” alla
soluzione del problema matematico

Facilità di implementazione: la formulazione del metodo numerico
deve essere sì che la sua traduzione in un algoritmo corrispondente
sia semplice e che l’algoritmo sia facile da implementare in un codice
di programmazione
Fonti di errore

Nel passaggio tra problema reale e formulazione del metodo
numerico si introducono degli errori.
Ipotesi semplificative nella costruzione del modello
2. Errori di misura nei dati errori di rappresentazione nei dati
3. Errori di troncamento (approx di un processo infinito con uno finito che
si possa effettivamente calcolare)
4. Errori di arrotondamento nei calcoli (esecuzione effettiva dell’algoritmo)
1.

è importante che gli errori introdotti nei vari stadi siano dello stesso
ordine: è inutile calcolare accuratamente la soluzione di un problema
matematico derivante da una modellizzazione non accurata.

L’Analisi numerica si occupa essenzialmente della fase 4.
Fonti di errore



Errori di discretizzazione o troncamento: errori legati alla definizione
metodo numerico (approssimazione derivata prima con rapporto
incrementale). A
Errori di convergenza: un metodo numerico definisce la soluzione
come limite di una successione. Dopo un numeri finito di iterazioni
bisogna fermarsi con un opportuno criterio di arresto. B
Errori di round-off (o di arrotondamento): errori dovuti all’aritmetica
finita di un elaboratore (errori di rappresentazione e loro
propagazione). C
g ( x)  f ( x)
f ( x)
A
gˆ ( x )  g ( x )
g ( x)
B
gˆ ( x  x )  gˆ ( x )
gˆ ( x )
C
Rappresentazione dei numeri
Il sistema di numerazione decimale è basato sull’alfabeto
decimale {0,1,2,3,4,5,6,7,8,9} ed ogni numero è rappresentato
come una sequenza di simboli di tale alfabeto. Ad ogni simbolo è
associato un peso a seconda della posizione.
Es:
2863=2 x 103 + 8 x 102 + 6 x 101 + 3 x 100


La base più usata nei calcolatori elettronici è la base 2. Questo è
dovuto al fatto che l’elemento base di un calcolatore elettronico è
un dispositivo (BIT) che può assumere due stati (on/off  0/1).
Es:
11002= 1 x 23+1 x 22+0 x 21+0 x 20
0.112 =0 x 20+1 x 2-1+1 x 2-2
Numeri interi

Numeri reali

Un numero reale viene memorizzato con una stringa del tipo
d0d1d2d3...dt c0c1...cs
dove
t
r    di 
i 1
1 i

e
e
s
s j
c

 j
j 1
Numeri di macchina


Poiché si hanno a disposizione un numero finito di bits, solo un sottoinsieme dei
numeri reali è rappresentabile in un computer. Tale sottoinsieme è detto insieme
dei numeri di macchina.
Si suppone di rappresentare i numeri reali con il sistema posizionale a “virgola
mobile normalizzata”
x  (d1.d2d3...)   e

dove la prima cifra d1 DEVE essere sempre diversa da zero.
In generale l’insieme dei numeri rappresentabili in un calcolatore è dato da
F(β,t,L,U)
–
–
–
β è la base
t sono le cifre di mantissa
L e U sono i valori minimo e massimo dell’esponente e
x  fl(x )  (d1.d2...dt )   e
Errori di rappresentazione
x  (d1.d2d3...)   e
fl( x )  (d1.d2d3...dt )   e




LeU
Errori di arrotondamento: il numero di cifre è maggiore di t
Errori di underflow: l’esponente e è minore di L
Errori di overflow: l’esponente e è maggiore di U (Inf nello standard
IEEE 754)
Il limite sulla mantissa caratterizza la precisione
Precisione



Il numero di cifre che l’elaboratore riserva alla mantissa dei numeri
reali (t) determina la precisione con la quale l’elaboratore lavora
Sia x≠0 un numero reale tale che la sua rappresentazione in virgola
mobile normalizzata richiede più di t cifre di mantissa
dobbiamo
fare un’approssimazione (errore di arrotondamento) e sostituire x con
il numero reale di macchina più vicino (floating di x fl(x))
La determinazione di fl(x) può avvenire in due modi: troncamento o
arrotondamento
 d1 .d2d3 dt  b
dt 1   / 2
arrotondamento  fl( x)  
b
d
d
d
d
1

dt 1   / 2

.

(

)
t
 1 2 3
troncamento  fl( x)  d1 .d2d3 dt  b
Errori

Si possono definire l’errore assoluto e relativo
eA  x  fl ( x )




eR 
x  fl ( x )
x
L’errore assoluto è influenzato dall’ordine di grandezza del dato, mentre
l’errore relativo non è influenzato dall’ordine di grandezza del dato.
L’errore relativo dà indicazioni sull’approssimazione operata sulla
mantissa del dato ovvero sull’accuratezza (o precisione) con cui il dato
è approssimato
L’errore relativo non dipende dalla caratteristica ma dalla mantissa
Se vogliamo una misura della precisione con cui l’elaboratore
approssima un qualunque numero reale dobbiamo svincolarci da
questa dipendenza
COME?
Considerando una limitazione superiore degli errori di arrotondamento
relativi
Precisione di macchina

Limitazione superiore degli errori relativi
con arrotondamento 
con troncamento 



x  fl ( x )
x
x  fl ( x )
x

1 1t
  m
2
  1t   m
x  0
x  0
La quantità εm è detta precisione di macchina.
La conoscenza di εm è fondamentale per valutare i risultati e scegliere le
tolleranze (nei programmi che traducono algoritmi)
Può essere calcolata operativamente come la più piccola quantità che
sommata ad 1 dà un risultato diverso da 1
fl ( x )  x(1  e)
e  m
Aritmetica finita



Dati e risultati sono memorizzati con un numero finito di cifre (t)
di mantissa e qualunque operazione viene effettuata con un
numero finito di cifre (t) di mantissa
! Risultati temporanei delle operazioni sono memorizzati in
apposite locazioni con più cifre di mantissa, ma in ogni caso il
numero è finito (si effettua un tronc./arr.)
Le 4 operazioni effettuate su numeri di macchina non producono
necessariamente un numero di macchina
Il risultato deve essere trasformato nel suo floating
x  y si scrive
x  y  fl ( fl ( x )  fl ( y ))
x  y si scrive
x  y  fl ( fl ( x )  fl ( y ))
x  y si scrive
x  y  fl ( fl ( x )  fl ( y ))
x  y si scrive
x  y  fl ( fl ( x )  fl ( y ))
Operazioni macchina
Somma algebrica di 2 numeri reali:

1.
2.
3.
Prodotto/divisione di 2 numeri reali

1.
2.

Si trasforma il numero con caratteristica minore in modo che i 2 numeri
abbiano la stessa caratteristica (uno dei due perde la forma v.m.n.)
Si sommano le mantisse (lasciando invariate le caratteristiche)
Si ricava il floating del risultato (si rinormalizza il numero troncando o
arrotondando se necessario)
Si esegue il prodotto/divisione delle mantisse e si
sommano/sottraggono le caratteristiche
Si ricava il floating del risultato (si rinormalizza il numero troncando o
arrotondando se necessario)
Esempio
F (10, 4, 4, 4), x  101 , y  0.0054
fl ( x )  1.000 100 ,
fl ( y )  5.400 103
x  y  fl (1.000 100  0.005100 )  0.995100  9.950 101
x  y  fl (1.000 100  ( 5.400) 103 )  5.400 103
Osservazioni sulla precisione finita

Per le operazioni di macchina non valgono più tutte le proprietà delle
quattro operazioni:



Vale la proprietà commutativa
Non vale la proprietà associativa
Non vale la proprietà distributiva
 Formule o algoritmi matematicamente equivalenti (che portano all stesso
risultato se applicati in precisione infinita) possono produrre risultati
diversi in aritmetica finita.
 Lo studio degli errori di arrotondamento e della loro propagazione
attraverso gli algoritmi è di fondamentale importanza per poter
interpretare e valutare i risultati di un qualunque algoritmo che operi con
numeri reali
Esempio 1
  10, t  4
a  2000
fl per troncamento:  m   1t  103
b  2.5 c  7.8
( a  b)  c  ( 2.000103  2.500100 )  7.800100 
 ( 2.000103  0.002(5)103 )  7.800100 
 2.002103  7.800100  2.002103  0.007(8)103  2.009103
a  (b  c )  2.000103  ( 2.500100  7.800100 ) 
 2.000103  1.030101 
 2.000103  0.010(3)103  2.010 103
( a  b )  c  a  (b  c )  2010.3
( a  b )  c  a  (b  c )
 L’ errore relativo nel primo caso: 1.3/2010.3≈10-3, mentre nel secondo
0.3/2010.3 ≈10-4. Pur essendo diversi gli errori sono accettabili in
entrambi i casi rispetto alla precisione usata
Esempio 2
  10, t  3
fl per troncamento:  m   1t  102
a  6.51 b  6.53
c
ab
 fl ((6.51100  6.53100 )  2)  fl (13.0 101 / 2)  6.50 100 [a, b]!
2
ca

ba
 6.51100  fl (6.53100  ( 6.51100 )) / 2)  6.51100  1.00 101  6.52 100
2
Formule matematicamente equivalenti non lo sono più quando
si opera in precisione finita
Algoritmo per determinare εm

Si osserva che
fl (1    p )  fl (1)
 m    p
fl (1    p  1)  fl (1)

1.
2.
3.
4.
5.
6.
La precisione di macchina è il più piccolo numero floating point che
sommato ad 1 da’ un numero più grande di 1.
Poni εm=1
Poni εm=β-1* εm
Poni a=1+ εm
Se a>1 vai a 2.
altrimenti vai a 5.
Poni εm=β* εm
Stampa εm
Importante




Il concetto di uguaglianza va modificato quando si lavora sui numeri reali
in precisione finita
Risultati diversi possono essere considerati uguali nei limiti della
precisione usata
Due numeri sono uguali quando hanno uguale caratteristica ed uguale
mantissa MA due numeri sono da considerarsi uguali quando la loro
differenza è piccola rispetto alla precisione di macchina |a-b|<ε
ε è la tolleranza ed il suo valore dipende dalla precisione di macchina
Complessità di calcolo



Un algoritmo è una successione finita di istruzioni, assegnate in
modo non ambiguo, la cui esecuzione consenta di passare da una
situazione iniziale (dati) ad una situazione finale (risultati), in un
tempo finito.
I requisiti fondamentali di un algoritmo sono la generalità (adatto a
risolvere una classe di problemi) e l’ottimalità (rispetto al tempo, al
numero di operazioni, alla stabilità, …)
Due algoritmi si possono confrontare anche rispetto al numero di
operazioni. Maggior numero di operazioni corrisponde a maggior
tempo di esecuzione, ma non sempre a peggior accuratezza (es.
aumentando # cifre per rappresentare un numero aumenta il tempo
di esecuzione delle operazioni…)
Esempio: algoritmo di Horner

Calcolo del valore di un polinomio in un punto
n
Pn ( x )   ai x i  a0  a1 x  a2 x 2    an x n  a0  x( a1  x( a2   x( an 1  xan ))...)
i 0
Algoritmo 1
Algoritmo 2
1. Dati a0,….an,x
1. Dati a0,….an,x
2. Poni s=a0, xp=1;
2. Poni s=an
3. Per i=1…n
3. Per i=n-1,n-2,….,0
1. xp=xp*x
2. s=s+ai*xp
1. s=s*x+ai
4. Stampa s
4. Stampa s
5. Stop
5. Stop
n Molt. +n Add.
2n Molt. +n Add.
OTTIMALE!
Condizionamento e stabilità
Def. Un problema è bencondizionato se a piccole variazioni sui dati
corrispondono piccole variazioni sui risultati
f ( x  x )  f ( x ) x

 x
f ( x)
x
Def. Un algoritmo è stabile se amplifica poco (relativamente alla
caratteristiche del calcolatore) gli errori di arrotondamento introdotti
nelle singole operazioni
Propagazione errori somma algebrica
x y 
fl ( x)  fl ( y )
fl ( x)  x (1   x )
fl ( y )  y (1   y )
 fl ( x)  fl ( y )  ( fl ( x)  fl ( y ))(1   s )
fl ( x)  fl ( y )  ( x  y ) ( fl ( x)  fl ( y))(1   s )  ( x  y )  x (1   x )  y (1   y ) (1   s )  ( x  y )


x y
x y
x y
 x  y  x x  y  y  (1   s )  ( x  y) x x  y  y  ( x  y ) s



x y
x y
x
y
 s 
x 
y
x y
x y
• Se x ≈ -y  CANCELLAZIONE NUMERICA
Propagazione errori moltiplicazione
x y 
fl ( x )  fl ( y )
fl ( x )  x (1   x )
fl ( y )  y (1   y )
 fl ( x )  fl ( y )  ( fl ( x )  fl ( y ))(1   p )
fl ( x )  fl ( y )  x y ( fl ( x )  fl ( y ))(1   p )  x y  x (1   x )  y (1   y )  (1   p )  x y


xy
xy
xy

x y  xy x  xy  y  xy  p  x y
xy

x y ( y   x   p )
xy
  p x y
Esempi

Malcondizionamento :
( x  1)4  0
( x  1)4  108

 xi  1
 xi  1  102
x
Instabilità: calcolo e per x=-9
x 2 x3
xk
e  1 x   
2 3!
k!
x
81 729
81 729


   1  9  
 
e 9  1  9  
2
3!
2
3!


1
sommando fino al 23-esimo termine, con la seconda
espressione O.K. , mentre con la prima si ottiene un risultato
negativo!
Osservazioni



Un problema può essere malcondizionato per certi dati e per
altri no.
Anche un problema bencondizionato può dare risultati non
sufficientemente corretti se risolto con un algoritmo instabile.
La stabilità di un algoritmo è data dal bencondizionamento della
successione delle trasformazioni elementari che lo
compongono.
Stabilità
Propagazione degli errori sui dati

Conclusione:
si commettono errori nel rappresentare i numeri reali
si commettono errori nell'esecuzione delle operazioni
aritmetiche
 Idea tranquillizzante e sbagliata: poiché gli errori sono molto
piccoli anche i risultati sono affetti da errori molto piccoli


Occorre studiare come si propagano gli errori delle
operazioni dell'algoritmo.

DEF: Un algoritmo si dice stabile se rimane limitato
l'influsso degli errori
Stabilità-2
Propagazione degli errori sui dati
 Ad esempio nella SOMMA si ha una grande amplificazione degli errori
sui dati sommando numeri quasi uguali in modulo ma opposti di
segno (cancellazione numerica)

L'analisi della propagazione degli errori in un algoritmo è
estremamente complessa. Dato un problema P
Analisi in avanti (forward analysis): si valuta la differenza tra la soluzione
esatta y e quella calcolata y~
 Analisi all’ indietro (backward analysis): si interpreta la soluzione
calcolata y~ come soluzione esatta di un problema perturbato Q e si
valuta P-Q

Esempi
Vengono qui presentati alcuni esempi nei quali l'insorgere di piccoli errori di arrotondamento
ha comportato un risultato disastroso nel comportamento di un sistema. Queste pagine sono

state riadattate a partire dalle pagine originali dovute al Prof. Douglas N. Arnold della Penn State University
ed al Prof. Kees Vuik della University of Technology di Delft (NL).
MISSILE PATRIOT
Il 25.02.1991, durante la guerra del Golfo, un missile Patriot di una batteria di
Dhahran, in Arabia Saudita, ha mancato l'intercettazione di un missile iracheno
SCUD. Lo SCUD ha distrutto una caserma americana. Altri missili SCUD sono
riusciti a colpire il territorio israeliano a causa di analoghi errori di intercettazione.

• Un report del General Accounting office spiega che l'errore é stato
dovuto essenzialmente al calcolo inaccurato del tempo a causa di errori
di arrotondamento. In particolare, il tempo, calcolato in decimi di
secondo nel computer della batteria dei PATRIOT, veniva poi moltiplicato
per 10 per ottenere un tempo in secondi. Questi calcoli furono eseguiti
con un formato a virgola fissa con registri a 24 bit. Sfortunatamente, il
numero 0.1 non ha una rappresentazione finita in rappresentazione 2 e,
di conseguenza, se troncato e poi moltiplicato per 10, finisce con il
comportare l'insorgere di significativi errori. Il semplice troncamento
produce in effetti un errore pari a circa 0.000000095.
Esempio 2
MISSILE ARIANE

Il 04.06.1996 un missile della classe Ariane V (un progetto costato,
durante una decina d'anni di sviluppo, circa 7 bilioni di dollari) della
European Space Agency (ESA) precipitó 37 secondi dopo il lancio dal
poligono di Kourou nella Guiana francese. La distruzione del missile e
del suo carico provocó una perdita di circa 500 milioni di dollari.

Il guasto alla base del fallimento, accertato dopo
due settimane di indagini, fu dovuto ad una erronea
conversione di un numero floating-point a 64 bit
(correlato alla velocitá orizzontale del razzo rispetto
alla piattaforma) in un intero a 16 bit: il numero
risultante, maggiore del massimo intero
rappresentabile pari aa 32768, provocó un overflow
nella misura della velocitá orizzontale con il
conseguente spegnimento dei razzi ed esplosione del
missile.