Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
a.a.2005/2006
Lezioni su
Sommario
1 Unicita della rappresentazione in base N . . . . . . . . . . . . 1
2 Conversione di base . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3 Rappresentazione IEEE dei numeri di macchina . . . . . . . 4
4 Precisione numerica . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5 Propagazione degli errori . . . . . . . . . . . . . . . . . . . . . . 9
6 Instabilita e malcondizionamento . . . . . . . . . . . . . . . . . 15
6.1 Instabilita . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
6.2 Malcondizionamento . . . . . . . . . . . . . . . . . . . . . . . 18
a = am N m + am1 N m1 + . . . + a1 N + a0 + a1 N 1 + a2 N 2 + . . . an N n
1
1. Unicita della rappresentazione in base N 2
Abbiamo supposto che il numero abbia una rappresentazione finita ma anche
nel caso piu generale avremo una rappresentazione simile. Dimostriamo che tale
rappresentazione e unica.
Dimostrazione.
Proviamo, innanzitutto, che ogni numero a e tale che N m a < N m+1 .
Se si pensa ad un numero in base decimale, questo e ovvio, nel senso che (ad
esempio) un numero con due cifre intere (m = 1) puo variare da 10 fino a 99, cioe e
compreso nellintervallo 10 a < 102 .
Supponiamo, dunque, che lo stesso numero a possa rappresentarsi - nella stessa
base N - come
a = am N m + am1 N m1 + . . . = bp N p + . . . ap1 N p1 . . .
con am 6= 0, bp 6= 0.
E proviamo che necessariamente deve essere p = m e bk = ak per ogni k =
m, m 1, . . ..
Per provare cio, si consideri che il valore minimo che puo assumere a, con m
fissato, si ha ponendo am = 1 e ak = 0 per k 6= m, da cui
a Nm
Luguaglianza puo sussistere solo se ambo i membri sono uguali a zero, cioe per
am = b m .
Ripetendo lo stesso ragionamento si trova che ak = bk per ogni k.
2 Conversione di base
Si vuole passare da una rappresentazione in base M ad una in base N :
a = am M m + am1 M m1 + . . . + a1 M + a0 + a1 M 1 + . . . + an M n
= br N r + br1 N r1 + . . . + b1 N + b0 + b1 N 1 + . . . + as N s
Osserviamo che un numero puo avere una rappresentazione finita in una base ma
infinita in unaltra base e viceversa.
Uguagliamo le parti intere delle due rappresentazioni e dividiamo per N , con i
calcoli eseguiti nella base di partenza M :
(a1 M 1 + a2 M 2 + . . . +)N = b1 + b2 N 1 + b3 N 2 + . . .
3. Rappresentazione IEEE dei numeri di macchina 4
Esempio
Vogliamo convertire il numero 725.625 dalla base 10 nella base 2
725 362 1 b0
362 181 0 b1
181 90 1 b2
90 45 0 b3
45 22 1 b4
Per la parte intera si ha:
22 11 0 b5
11 5 1 b6
5 2 1 b7
2 1 0 b8
1 0 1 b9
.625 2 = 1.250 b1 = 1
.250 2 = 0.50 b2 = 0
Per la parte decimale:
.5 2 = 1.0 b3 = 1
.0 2 = 0.0
In base 2 il numero diventa 1011010101.101.
Questo modo di procedere diventa alquanto laborioso quando i calcoli devono es-
sere eseguiti in una base diversa da quella decimale, per cui conviene sempre passa-
re alla base decimale e poi da questa allaltra base utilizzando la rappresentazione
polinomiale del numero.
Il passaggio dalla base 2 alle basi 4, 8, 16 sono semplici considerando che 4 = 22 ,
8 = 23 , 16 = 24 . Basta allora suddividere il numero binario in gruppi di 2, 3 e 4
cifre, rispettivamente, per passare alle basi 4, 8 e 16.
Per passare dalla base 4 alle base 16, si suddivide il numero in gruppi di due
considerando che 16 = 42 . Non si puo invece passare cos facilmente dalla base 8
alla bsae 16 perche luna non e potenza dellaltra.
Il perche del passaggio da una base ad unaltra semplificato nel caso di una base
potenza dellaltra lo si vede subito vedendo il caso delle basi 2 e 4. In base 2 sono
possibili le sole cifre 0 e 1. In base 4 invece abbiamo 0, 1, 2 e 3. Ora, tutte le
possibili combinazioni delle coppie di cifre 0 e 1 sono: 00, 01, 10, 11 vale a dire 0,
1, 2 e 3 in base 4. Percio prendendo a due a due coppie di cifre in base 2 ottengo la
rappresentazione in base 4.
a = (1 + f1 21 + f2 22 + . . . + fm 2m ) 2p ,
dove
s e e e e e e f f f f f f
|{z} | {z } | {z }
segno esponente mantissa
Quindi, per rappresentare un numero reale b+p non puo essere uguale a 1111 . . . 1:
cio significa che il massimo esponente che si puo rappresentare e dato sottraendo a
1111 . . . 1 il valore 1 in base 2, cioe da 1111 . . . 1 0000 . . . 01 = 1111 . . . 10.
Si ha b + p 1111 . . . 10, o equivalentemente, 0111 . . . 1 + p 1111 . . . 10, da cui
ricaviamo
p 1111 . . . 10 0111 . . . 1 = 0111 . . . 1 = b
.
Il limite superiore U e proprio uguale a b.
Per il limite inferiore abbiamo: 0000 . . . 0 < b + p cioe, equivalentemente,
b < p b + 0000 . . . 01 p.
m
X 1 2(m+1) U
1. 111 . . . 1} 2U = 2k 2U = 2 = (2 2m )2U 2U +1
| {z 1 21
m bits k=0
1. 000
| {z. . . 0} 2L = 2L
bits m
Esempio
Vogliamo scrivere il numero 5.7510 in formato IEEE in singola precisione.
Effettuiamo prima la conversione in base 2:
5 2 1 b0
Per la parte intera: 2 1 0 b1
1 0 1 b2
3. Rappresentazione IEEE dei numeri di macchina 7
.75 2 = 1.50 b1 = 1
Per la parte decimale: .5 2 = 1.0 b2 = 1
.0 2 = 0.0
Quindi 5.7510 = 101.112 = 1.0111 22 .
Memorizziamo ora il numero in singola precisione:
Per lesponente:
0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 1 0 1 1 1 0 0 ... 0 0 0 0 0 0 0
|{z} | {z } | {z }
s esponente mantissa
Consideriamo, ora, la rappresentazione dei numeri speciali.
Per convenzione si pone uguale a 0 la rappresentazione che vede tutti zero sia
nel segno, sia nellesponente che nella mantissa (non dimentichiamo che il valore 1
della normalizzazione non e messo in memoria ma ce e quindi non potremmo mai
avere il valore 0 - percio lo si pone per convenzione).
Per i valori si considerano tutti 1 nello spazio dedicato allesponente e tutti
0 nello spazio dedicato alla mantissa:
4 Precisione numerica
Un numero puo avere una rappresentazione finita o infinita. Basti pensare al valore
di o a 2 in base 10.
Abbiamo anche visto che un numero puo avere rappresentazione finita in una
base ma infinita in unaltra.
Esempio
Scriviamo il numero 1.110 in base 2.
Per la parte intera: 1 0 1 b0
.1 2 = 0.2 b1 = 0
.2 2 = 0.4 b2 = 0
.4 2 = 0.8 b3 = 0
.8 2 = 1.6 b3 = 1
.6 2 = 1.2 b4 = 1
Per la parte decimale:
.2 2 = 0.4 b5 = 0
.4 2 = 0.8 b6 = 0
.8 2 = 1.6 b7 = 1
.6 2 = 1.2 b8 = 1
.2 2 = 0.4 b9 = 0
Osserviamo che nella parte decimale si ripetono allinfinito le cifre 0011.
Il numero in base 2 si scrive infatti come: 1.0 0011
| {z } 0011
| {z } . . .
Quando rappresentiamo un numero al calcolatore sara possibile memorizzare
solo un certo numero di cifre: come esprimerlo?
Per lasciare
Pmaggiore generalita al discorso, consideriamo una base N .
Sia a = ( k=0 bk N )N p il numero esatto.
k
P
In floating-point esso sara espresso come a = ( t1 k=0 bk N
k )N p , esso, cioe,
sara arrotondato.
Ci sono due modi per arrotondare un numero
N 1t N p nel troncamento
errore assoluto |a a | 1 1t p
N N nellarrotondamento
2
Per lerrore relativo, invece, si ha:
|a a | N
1t nel troncamento
errore relativo 1 1t
|a| N nellarrotondamento
2
1
Il valore N 1t e il numero conosciuto come precisione di macchina.
2
Esempio
Nel caso della rappresentazione IEEE di un numero, con t 1 = m, lerrore di
arrotondamento che si commette e:
|a a | 2(m+1)
In singola precisione avremo
Moltiplicazione2
Divisione (con y 6= 0)
x(1 + ex ) x x
= (1 + ex )(1 ey + e2y + . . .) (1 + ex ey )
y(1 + ey ) y y
x y
x(1 + ex ) + y(1 + ey ) = x + y + xex + yey = (x + y)(1 + ex + ey )
x+y x+y
x y
Lerrore e ex+y = ex + ey , una combinazione lineare che dipende da
x+y x+y
x e y.
|0.100337 0.1004|
Questa volta lerrore relativo e .63 103 . Lerrore e mag-
0.100337
giore della precisione di macchina.
Esempio [Il disastro del missile Patriot ]
Nel 1991 un missile Patriot fall loperazione di inseguire e fermare uno Scud, in
Arabia Saudita, a causa di un problema di precisione numerica. Come conseguenza,
lo Scud uccise 28 americani.
Il computer usato per controllare il missile Patriot era basato su unaritmetica
a 24 bit. Per i calcoli, il tempo veniva registrato dallorologio interno del sistema
in decine di secondi e successivamente moltiplicato per 1/10 per ottenere i secondi,
utilizzando 24 bit in virgola fissa. Il numero 1/10 in base 2 ha infinite cifre decimali:
la sua espansione binaria e infatti 0.0001100110011001100110011001100 . . .. In 24
bit esso veniva registrato come 0.00011001100110011001100 introducento un errore di
0.0000000000000000000000011001100 . . ., circa 0.000000095 in base 10.
Gli errori di arrotondamento nella conversione del tempo causarono un errore
nel calcolo della traiettoria. Difatti, il tempo di 100 ore calcolato in secondi diede il
valore 359999.6567 invece di 360000, un errore di 0.3433 secondi che porto il Patriot
687 metri fuori della traiettoria del missile Scud!
Esempio [Sul fenomeno di cancellazione]
Consideriamo il problema di approssimare la derivata della funzione f (x) =
sin x nel punto x = 1.2.
Supponiamo di non poter valutare direttamente la derivata della f e di volerla
approssimare facendo uno sviluppo in serie di Taylor:
h2 00 h3 h4
f (x0 + h) = f (x0 ) + hf 0 (x0 ) + f (x0 ) + f 000 (x0 ) + f IV (x0 ) + . . .
2 6 24
Allora
f (x0 + h) f (x0 ) h h2 h3
f 0 (x0 ) = ( f 00 (x0 ) + f 000 (x0 ) + f IV (x0 ) + . . .)
h 2 6 24
f (x0 + h) f (x0 )
Approssimiamo, quindi, la f 0 (x0 ) calcolando .
h
Lerrore di discretizzazione che si commette e
f (x0 + h) f (x0 ) h h2 h3
|f 0 (x0 ) | = | f 00 (x0 ) + f 000 (x0 ) + f IV (x0 ) + . . . |
h 2 6 24
Supponendo di conoscere il valore della derivata seconda in x0 , per piccoli valori
di h possiamo dare una stima dellerrore di discretizzazione,
f (x0 + h) f (x0 ) h
|f 0 (x0 ) | |f 00 (x0 )|
h 2
5. Propagazione degli errori 12
5
10
10
10
Errore assoluto
15
10
20
10
25
10
20 15 10 5 0
10 10 10 10 10
passo h
0
10
5
10
Errore assoluto
10
10
15
10
20
10
25
10
20 15 10 5 0
10 10 10 10 10
passo h
6 Instabilita e malcondizionamento
6.1 Instabilita
In generale e impossibile evitare un accumulo lineare degli errori di arrotondamen-
to durante un calcolo, ed e accettabile che ci sia una crescita lineare moderata, del
tipo
En c0 nE0
dove En misura lerrore relativo delln-sima operazione dellagoritmo e c0 sia una
costante non molto grande.
Se invece avviene una crescita di tipo esponenziale
En cn1 E0
1. valutare y0 = ln 11 ln 10
1
2. per n = 1, 2, . . . , 30 valutare yn = 10yn1
n
Questa formula ricorsiva dovrebbe dare lesatto valore se non fossero presenti
errori di arrotondamento. I numeri che generiamo, infatti, tendono a zero mentre
lerrore si moltiplica.
Infatti
y1 = 1 10y0
1 1
y2 = 10(1 10y0 ) = 10 102 y0
2 2
1 1
y3 = 10( 10 10 y0 ) = 103 y0 + costante
2
3 2
......
yn = 10n y0 + costanten
n yn
0 9.5310e-2
1 4.6898e-2
2 3.1021e-2
3 2.3122e-2
4 1.8778e-2
... ....
7 -3.0229e-1
8 3.1479e+0
9 -3.1368e+1
10 3.1378e+2
18 3.1377e+10
27 -3.1377e+19
30 3.1377e+22
1 1
Se invece, considero yn1 = ( yn ), partendo da un valore di n molto grande
10 n
e andando a ritroso, lerrore diminuisce. Percio, dato un valore di accuratezza > 0 e
fissato un intero n0 e possibile determinare lintero n1 tale che, partendo da yn1 = 0 e
andando a ritroso, gli integrali yn saranno valutati con un errore in valore assoluto
minore di per 0 < n n0 .
Infatti:
y n0 = 0
1 1
yn0 1 =
10 n0
1 1 1 1 1
yn0 2 = ( ) = 2 costante2
10 n0 1 10 n0 10
1
yn = n0 n costanten0 n
10
1
Lerrore al passo n dipende, quindi, da .
10n0 n
Se richiediamo una tolleranza = 106 , per calcolare yn1 allora dovra essere
1
< = 10n1 n0 <
10n0 n1
Passando al logaritmo in base 10:
n yn
26 0.000000
25 3.84615e-3
24 3.61538e-3
23 3.80513e-3
22 3.96731e-3
21 4.14872e-3
20 4.34703e-3
19 4.56530e-3
18 4.80663e-3
17 5.07489e-3
16 5.37486e-3
15 5.71251e-3
14 6.09542e-3
13 6.53332e-3
12 7.03898e-3
11 7.62944e-3
10 8.32797e-3
9 9.16720e-3
8 1.01944e-2
7 1.14806e-2
6 1.31377e-2
5 1.53529e-2
4 1.84647e-2
3 2.31535e-2
2 3.10180e-2
1 4.68982e-2
0 9.53102e-2
6.2 Malcondizionamento
Un problema si dice malcondizionato se a piccole variazioni nei dati di input del
problema corrispondono forti variazioni nei dati di output. Quando il problema e,
dunque, molto sensibile alle variazioni dei dati di input, producendo risultati molto
6. Instabilita e malcondizionamento 19
diversi tra loro, allora nessun algoritmo, per quanto robusto e stabile, potra dare
una soluzione robusta al problema stesso.
Esempio [Sui polinomi]
Sia p(x) il polinomio di grado n, p(x) = xn + an1 xn1 + . . . + a1 x + a0 , con a0 6= 0.
Si vogliono trovare le radici del polinomio p(x).
I dati di input sono dunque i coefficienti ai , i = 0, n 1 del polinomio mentre i
dati di output sono le radici del polinomio. Sia una radice del polinomio. Essa
sara funzione dei coefficienti ai , quindi scriveremo = f (a0 , a1 , . . . , an1 ).
Perturbiamo, ora, uno dei coefficienti, ad esempio ak con ak +ak e vediamo come
variano le radici del polinomio perturbato rispetto a quello di partenza, consideran-
do il rapporto
f
f
dove f = f (a0 , a1 , . . . , ak + ak , . . . , an1 ) f (a0 , a1 , . . . , ak , . . . , an1 )
Supponendo ak sufficientemente piccolo, si puo approssimare f con lo svilup-
f
po in serie di Taylor troncato al primo termine, cioe f = ak .
ak
Percio
f f
ak ak
f ak ak ak
= =
f f f ak
f
La variazione sulle radici e dunque proporzionale alla variazione sui dati di
f
f
ak
ak ak
ingresso mediante il coefficiente .
ak f
Calcoliamo questa quantita. Scriviamo il polinomio come:
n + an1 n1 + . . . + ak xk + . . . + a0 = 0
vale a dire
ak k
Se il coefficiente e grande in valore assoluto, allora a piccole variazioni
p0 ()
sul coefficiente ak si avranno grandi variazioni nella radice . Cio, si verifica, ad
esempio, quando le radici sono in modulo molto vicine tra loro.
Supponiamo di avere il polinomio p(x) = (x 1)(x 2) (x 10). Chiaramente,
tale polinomio ha radici 1, 2, . . . , 10. Se perturbiamo il polinomio variando il coeffi-
ciente a9 del valore 0.0001, considerando cioe il polinomio p(x) + 0.0001x9 allora le
radici corrispondenti a 7, 8, 9, 10 non saranno piu reali ma avranno anche una parte
immaginaria.
Quindi un piccolo cambiamento nel coefficiente a9 , da -55 a -54.9999 porta a
grandi cambiamenti in alcune delle radici del polinomio.