1. Numeri di
macchina
Luca Zanni , Marco Prato
Calcolo Numerico
Corsi di Laurea in Matematica e Informatica
2. Rappresentazione interna dei numeri
A causa della limitata lunghezza della locazione di memoria
disponibile per rappresentare i numeri, si possono
rappresentare solo un intervallo limitato di numeri interi e un
insieme finito di numeri reali
I numeri rappresentabili esattamente sul calcolatore sono
detti numeri finiti o numeri di macchina
3. Numeri interi
Sia M il numero di bits riservati per la rappresentazione di un
numero in un elaboratore
Interi positivi
Sono caratterizzati da una rappresentazione binaria con il primo
bit uguale a 0
Ad esempio, n = 109 su 16 bit (M = 16) ha una rappresentazione
interna
00000000 01101101
(109)10 = (1101101)2
4. Numeri interi
Il massimo numero intero positivo rappresentabile esattamente
con M bits è dato da
Nmax = 2(M-1)-1
011……………1
Esempi:
M = 16
Nmax = 215-1 = 32767
M = 32
Nmax = 231-1 = 2147483647
5. Numeri interi
Interi negativi
Per unificare le operazioni di addizione e sottrazione si usa
rappresentare i numeri interi negativi nella forma complemento a
due. Sia –n il numero intero negativo da rappresentare con M
bits:
- si considera la rappresentazione di n su M bits
- si invertono logicamente tutte le M cifre
- si somma 1 al risultato dell’inversione logica
6. Numeri interi
Esempio: rappresentazione interna di n = -5 su M = 16 bits
- Si considera la rappresentazione di 5 su 16 bits
00000000 00000101
- Si esegue l’inversione logica delle 16 cifre
11111111 11111010
- Si somma 1 al risultato dell’inversione logica
11111111 11111011
7. Numeri interi
Il minimo numero intero negativo rappresentabile esattamente
con M bits è dato da
Nmin = -2(M-1)
100……………0
Esempi:
M = 16
Nmin = -215 = -32768
M = 32
Nmin = -231 = -2147483648
Quando si cerca di rappresentare un numero n > Nmax o n < Nmin si
parla di overflow
8. Numeri interi
I numeri interi rappresentabili con M bits sono quindi
2(M-1) – 1 + 2(M-1) + 1 = 2M
positivi negativi lo zero
Esempio: M = 4 bits
0 111 7 1 111 -1
0 110 6 1 110 -2
0 101 5 1 101 -3
0 100 4 1 100 -4
0 011 3 1 011 -5
0 010 2 1 010 -6
0 001 1 1 001 -7
0 000 0 1 000 -8
9. Numeri reali
Sia x ≠ 0 il numero reale che si vuole rappresentare.
Consideriamo il numero scritto in rappresentazione binaria, con
notazione posizionale e con la prima cifra significativa (che è
sempre 1) a sinistra del punto radice1:
x = (-1)s · 1.a1a2a3… · 2p
Si devono memorizzare:
- s (0 se x > 0, 1 se x < 0) 1 bit
- le cifre a1a2a3… della mantissa t bits
- la caratteristica p (Emin ≤ p ≤ Emax) l bits (la rappresentazione
di p è traslata: si rappresenta p + bias)
1:rappresentazione nel formato IEEE (Institute of Electrical and Electronics
Engineers) standard for binary floating-point arithmetic, documento 754
dell’ANSI
10. Numeri reali
I bit riservati per la memorizzazione in precisione semplice (32
bit) e in precisione doppia (64 bit) di un numero reali sono così
distribuiti:
precisione precisione
semplice doppia
n. bit 32 (4 bytes) 64 (8 bytes)
s 1 1
t 23 52
l 8 11
bias 127 1023
Emin -126 -1022
Emax 127 1023
11. Numeri reali
Precisione semplice
32 bits
s p mantissa
8 bits 23 bits
Precisione doppia
64 bits
s p mantissa
11 bits 52 bits
12. Esempio
Rappresentazione interna di x = (4.25)10 in precisione semplice
x = (100.01)2 = 1.0001 · 22
- s = 0 (x > 0)
- le cifre della mantissa da memorizzare sono 0001
- l’esponente è 2 ma si deve memorizzare in forma traslata (p +
bias)
p 0 0 0 0 0 0 1 0
bias (127) 0 1 1 1 1 1 1 1
1 0 0 0 0 0 0 1
01000000 10001000 00000000 00000000
segno
caratteristica mantissa
13. Numeri reali
Numero positivo più piccolo rappresentabile in precisione semplice:
xmin = 1.00…0 · 2-126 ~ 1.17 · 10-38
00000000 10000000 00000000 00000000
Numero positivo più grande rappresentabile in precisione semplice:
xmax = 1.11…1 · 2127 ~ 3.40 · 1038
01111111 01111111 11111111 11111111
Precisione doppia:
xmin = 1.00…0 · 2-1022 ~ 2.22 · 10-308 , xmax = 1.11…1 · 21023 ~ 1.7 · 10308
14. Osservazione
Il valore di p corrispondente alla configurazione degli l bit in
precisione semplice è il seguente:
configurazione degli 8 bit p mantissa con tutti bit nulli:
rappresentazione di 0
00000000 (*)
00000001 -126 (Emin) mantissa con bit non nulli:
00000010 -125 rappresentazione dei
numeri denormalizzati
011111110 -1
011111111 0
10000000 1
10000001 2
mantissa con tutti bit nulli:
rappresentazione di Inf
11111110 127 (Emax)
11111111 (**) mantissa con bit non nulli:
rappresentazione di Nan
15. Errore di rappresentazione
Rappresentando un numero reale x = ±m·βp su un calcolatore (con t
bit a disposizione per la mantissa), si presenta uno dei seguenti
quattro casi:
1. x può essere rappresentato in modo esatto (numero di
macchina)
2. x è, in valore assoluto, più piccolo del più piccolo numero
positivo rappresentabile (p < Emin). In questo caso si verifica un
underflow e generalmente si assume 0 come valore
approssimato di x (con eventuale segnalazione di warning)
3. x è, in valore assoluto, più grande del più grande numero
positivo rappresentabile (p > Emax). In questo caso si verifica un
overflow, x viene approssimato con ±∞ a seconda del segno e il
sistema arresta il calcolo
16. Errore di rappresentazione
Rappresentando un numero reale x = ±m·βp su un calcolatore (con t
bit a disposizione per la mantissa), si presenta uno dei seguenti
quattro casi:
4. la caratteristica è rappresentabile in modo esatto (Emin ≤ p ≤
Emax), ma la mantissa m di x non è rappresentabile con t cifre.
In questo caso il numero x = ±a1a2a3…·βp viene approssimato con
il numero di macchina x’ = ±m’·βp , con
0.a1a2 ...at troncamento
−t 1
m' = at + β se at +1 ≥ 2 β
0.a1a2 ...at at = arrotondamento
a 1
se at +1 < β
t
2
17. Esempi
- β = 10, t = 4
tr(x) = 0.3478·103
x = 0.347821·103
rd(x) = 0.3478·103
tr(x) = 0.3478·103
x = 0.347891·103
rd(x) = 0.3479·103
- β = 2, t = 4
tr(x) = 0.1011·210
x = 0.101101·210
rd(x) = 0.1011·210
tr(x) = 0.1011·210
x = 0.101110·210
rd(x) = 0.1100·210
18. Precisione di macchina
Teorema
Siano x un numero reale non nullo, x’ approssimazione di macchina
di x. L’errore relativo che si commette approssimando x con x’ è
β 1−t troncamento
x − x'
εx ≡ ≤ eps, eps = 1 1−t
x β −t arrotondamento
2
La quantità eps è detta precisione di macchina ed è definita come
il più piccolo numero di macchina che sommato a 1 restituisce come
numero di macchina un numero maggiore di 1
Su calcolatore la precisione di macchina è data da:
N.B.: il +1 corrisponde alla
21-(23+1) = 2-23 ~ 1.19·10-7 (32 bit)
cifra a sinistra del punto
eps = radice che, essendo sempre 1,
21-(52+1) = 2-52 ~ 2.22·10-16 (64 bit) non viene memorizzata
19. Operazioni tra interi di macchina
Addizione tra interi di macchina
Siano x’ e y’ due numeri interi rappresentabili su M bit. Si possono
avere due casi:
1. la somma z = x’ + y’ richiede M cifre la sua rappresentazione
di macchina z’ coincide con z
Esempio: M = 5, x’ = 10101, y’ = 00111 z = 11100 z’ = z
2. la somma z = x’ + y’ richiede M+1 cifre la sua
rappresentazione di macchina z’ coincide con un numero congruo a
z modulo 2M (ovvero, z - z’ = k · 2M, con k numero intero). In questo
caso si dice che l’addizione ha provocato un traboccamento
Esempio: M = 5, x’ = 10101, y’ = 01101 z = 100010 z’ = 00010
20. Operazioni tra interi di macchina
Sottrazione tra interi di macchina
Siano x’ e y’ due numeri interi rappresentabili su M bit.
L’operazione z = x’ - y’ viene eseguita come la somma di x’ con il
complemento a due di y’
Esempi:
- M = 4, x’ = 0010, y’ = 0011 z = 0010 – 0011 = 0010 + 1101 = 1111
z’ = z
- M = 4, x’ = 0101, y’ = 0011 z = 0101 – 0011 = 0101 + 1101 = 10010
z’ = 0010
21. Operazioni tra interi di macchina
Moltiplicazione tra interi di macchina
Siano x’ e y’ due numeri interi rappresentabili su M bit.
L’operazione z = x’ * y’ può essere ricondotta ad una sequenza di
addizioni e di spostamenti a destra della stringa delle cifre
Per il calcolo si utilizzano due accumulatori A e B; l’accumulatore A
è formato da M bit mentre l’accumulatore B è composto da due
parti, la prima di M+1 bit (che chiameremo R) e la seconda di M bit.
Il numero di macchina x’ viene memorizzato in A mentre y’ nella
seconda parte di B. In R si memorizza il numero r inizializzato a 0
Seguiamo il procedimento con un esempio pratico
22. Operazioni tra interi di macchina
Moltiplicazione tra interi di macchina
Esempio: M = 6, x’ = 000011, y’ = 000101 R
A 000011 B 0000000 000101
Si calcola 1*x’+r (1 è la cifra di y’ associata a 20) e il risultato lo si memorizza in R
A 000011 B 0000011 000101
Si esegue uno spostamento di un bit verso destra in B
A 000011 B 0000001 100010 passo 1
Si calcola 0*x’+r (0 è la cifra di y’ associata a 21) e il risultato lo si memorizza in R
A 000011 B 0000001 100010
Si esegue uno spostamento di un bit verso destra in B
A 000011 B 0000000 110001 passo 2
23. Operazioni tra interi di macchina
Moltiplicazione tra interi di macchina R
A 000011 B 0000000 110001
Ripetendo i passi precedenti si ottiene
A 000011 B 0000011 110001 1*x’ + r passo 3
A 000011 B 0000001 111000 spostamento a destra
A 000011 B 0000001 111000 0*x’ + r passo 4
A 000011 B 0000000 111100 spostamento a destra
A 000011 B 0000000 111100 0*x’ + r passo 5
A 000011 B 0000000 011110 spostamento a destra
A 000011 B 0000000 011110 0*x’ + r passo 6
A 000011 B 0000000 001111 spostamento a destra
Dopo M passi, in B è memorizzato z = x’ * y’ e nella seconda parte di B la sua
rappresentazione di macchina z’
24. Operazioni tra interi di macchina
Moltiplicazione tra interi di macchina
Esempio: M = 3 , β = 10, x’ = 215, y’ = 162
A 215 B 0000 162
A 215 B 0430 162 2*x’ + r passo 1
A 215 B 0043 016 spostamento a destra
A 215 B 1333 016 6*x’ + r passo 2
A 215 B 0133 301 spostamento a destra
A 215 B 0348 301 1*x’ + r passo 3
A 215 B 0034 830 spostamento a destra
25. Operazioni tra interi di macchina
Divisione tra interi di macchina
Siano x’ e y’ due numeri interi rappresentabili su M bit.
L’operazione z = x’ / y’ può essere ricondotta ad una sequenza di
sottrazioni e di spostamenti a sinistra della stringa delle cifre
Per il calcolo si utilizzano due accumulatori A e B; l’accumulatore A
è formato da M bit mentre l’accumulatore B è composto da due
parti, entrambe di M bit (che chiameremo R e Q). Il numero di
macchina y’ viene memorizzato in A mentre x’ in R. In Q si
memorizza il numero q inizializzato a 0
Anche in questo caso seguiamo il procedimento con un esempio
pratico
26. Operazioni tra interi di macchina
Divisione tra interi di macchina
Esempio: M = 6, x’ = 010000, y’ = 000101
Inizialmente si eseguono s spostamenti verso destra nell’accumulatore B, fino a
quando in R c’è un numero r tale che y’ ≤ r < βy’.
La divisione sarà composta da s + 1 passi R Q
A 000101 B 010000 000000
s = 1 (y’ = 000101, βy’ = 001010)
A 000101 B 001000 000000
Si calcola il numero intero q tale che qy’ ≤ r < (q+1)y’ e r = r – qy’. Al primo passo si
ha q = 1 e r = 000011
A 000101 B 000011 000001
Si esegue lo spostamento di un bit verso sinistra in B
A 000101 B 000110 000010 passo 1
27. Operazioni tra interi di macchina
Divisione tra interi di macchina
Esempio: M = 6, x’ = 010000, y’ = 000101
R Q
A 000101 B 000110 000010
Si calcola il numero intero q tale che qy’ ≤ r < (q+1)y’ e r = r – qy’. Al secondo e
ultimo passo (s + 1 = 2) si ha q = 1 e r = 000001
A 000101 B 000001 000011 passo 2
Alla fine del procedimento, in Q è memorizzato il quoziente della divisione (q =
000011) e in R rimane memorizzato il resto (r = 000001)
28. Operazioni tra interi di macchina
Divisione tra interi di macchina
Esempio: M = 4, β = 10, x’ = 3151, y’ = 0012
A 0012 B 3151 0000
A 0012 B 0031 5100 spostamento a destra (s = 2)
A 0012 B 0007 5102 q = 2, r = 7 passo 1
A 0012 B 0075 1020 spostamento a sinistra
A 0012 B 0003 1026 q = 6, r = 3 passo 2
A 0012 B 0031 0260 spostamento a sinistra
A 0012 B 0007 0262 q = 2, r = 7 passo 3
resto quoziente
29. Operazioni tra reali di macchina
Addizione e sottrazione tra reali di macchina
Siano
x’ = ±m’x·βp = (0.x1x2…xt) (x1 ≠ 0) , y’ = ±m’y·βq = (0.y1y2…yt) (y1 ≠ 0)
due numeri reali di macchina rappresentati in base β con t cifre
della mantissa. Si vuole calcolare z’ = ±m’z·βs, approssimazione di
macchina di z = x’ ± y’. Si eseguono i seguenti tre passi:
1. Confronto degli esponenti:
- se p = q, si va al passo 2 con m’y = m’y = 0.y1y2…yt
- se p ≠ q (ad es. p > q), si divide m’y per βp-q e si costruisce
m’y = 0.00…0y1y2…yt
p-q
30. Operazioni tra reali di macchina
Addizione e sottrazione tra reali di macchina
2. Somma delle mantisse: si esegue mz = m’x ± m’y
- se mz = 0, allora z’ = 0
- se la somma ha provocato traboccamento, si divide mz per β,
si sceglie come m’z il troncamento (arrotondamento) alla t-
esima cifra del risultato di tale divisione e si pone s = p + 1
- se la somma non ha provocato traboccamento e le prime r ≥ 0
cifre di mz sono nulle, si moltiplica mz per βr, si sceglie come m’z
il troncamento (arrotondamento) alla t-esima cifra del
risultato di tale moltiplicazione e si pone s = p – r
3. Controllo della caratteristica: si esamina se Emin ≤ s ≤ Emax
(intervallo di rappresentazione della caratteristica)
31. Operazioni tra reali di macchina
Esempio: sommare i numeri di macchina
x’ = 0.12345678·102, y’ = 0.23456789·10-1 (β=10, t=8)
Seguendo il procedimento descritto si hanno p = 2 e q = -1, dunque
m’y = 0.00023456789
p-q=3
Si sommano le mantisse:
mz = 0.12345678 + 0.00023456789 = 0.12369134789
La somma non ha provocato traboccamento, r = 0, s = p - r = 2 e
m’z = 0.12369134. Quindi
z’ = 0.12369134·102
32. Operazioni tra reali di macchina
Esempio: sommare i numeri di macchina
x’ = 0.75869978·102, y’ = 0.98151815·102 (β=10, t=8)
Seguendo il procedimento descritto si hanno p = 2 e q = 2, dunque
m’y = 0.98151815
Si sommano le mantisse:
mz = 0.75869978 + 0.98151815 = 1.74021793
La somma ha provocato traboccamento: si divide mz per 10 (mz =
0.174021793), si definisce m’z = 0.17402179 e si pone s = p + 1 = 3.
Quindi
z’ = 0.17402179·103
33. Operazioni tra reali di macchina
Esempio: sommare i numeri di macchina
x’ = 0.75869978·102, y’ = -0.75868863·102 (β=10, t=8)
Seguendo il procedimento descritto si hanno p = 2 e q = 2, dunque
m’y = 0.75868863
Si sottraggono le mantisse:
r=4
mz = 0.75869978 - 0.75868863 = 0.00001115
La somma non ha provocato traboccamento: si moltiplica mz per 104
(mz = 0.1115), si definisce m’z = 0.11150000 e si pone s = p - r = -2.
Quindi
z’ = 0.11150000·10-2
34. Operazioni tra reali di macchina
Moltiplicazione tra reali di macchina
Siano
x’ = ±m’x·βp = (0.x1x2…xt) (x1 ≠ 0) , y’ = ±m’y·βq = (0.y1y2…yt) (y1 ≠ 0)
due numeri reali di macchina rappresentati in base β con t cifre
della mantissa. Si vuole calcolare z’ = ±m’z·βs, approssimazione di
macchina di z = x’ * y’. Si eseguono i seguenti due passi:
1. Moltiplicazione delle mantisse: si calcola mz = m’x * m’y (mz ha 2t
cifre)
- se la prima cifra di mz è 0, si moltiplica mz per β e si pone r = 1
- se la prima cifra di mz è diversa da 0, si pone r = 0
La mantissa m’z di z’ è il troncamento (arrotondamento) alla t-esima
cifra di mz
35. Operazioni tra reali di macchina
Moltiplicazione tra reali di macchina
2. Controllo della caratteristica: si pone s = p + q – r e si esamina
se Emin ≤ s ≤ Emax (intervallo di rappresentazione della caratteristica)
Esempio: moltiplicare i numeri di macchina
x’ = 0.11111·101, y’ = 0.33333·103 (β=10, t=5)
Moltiplicando le mantisse si ottiene
mz = 0.11111 * 0.33333 = 0.0370362963
Essendo la prima cifra di mz nulla, si moltiplica mz per 10 (mz =
0.370362963), si definisce m’z = 0.37036 e si pone s = p + q - r = 3.
Quindi
z’ = 0.37036·103
36. Operazioni tra reali di macchina
Divisione tra reali di macchina
Siano
x’ = ±m’x·βp = (0.x1x2…xt) (x1 ≠ 0) , y’ = ±m’y·βq = (0.y1y2…yt) (y1 ≠ 0)
due numeri reali di macchina rappresentati in base β con t cifre
della mantissa. Si vuole calcolare z’ = ±m’z·βs, approssimazione di
macchina di z = x’ / y’. Si eseguono i seguenti tre passi:
1. Confronto delle mantisse
- se m’x ≥ m’y , si definisce m’x come la divisione di m’x per β e si pone
r=1
- se m’x ≥ m’y , si definisce m’x = m’x e si pone r = 0
37. Operazioni tra reali di macchina
Divisione tra reali di macchina
2. Divisione delle mantisse: si calcola mz = m’x / m’y . La mantissa m’z
di z’ è il troncamento (arrotondamento) alla t-esima cifra di mz
3. Controllo della caratteristica: si pone s = p - q + r e si esamina
se Emin ≤ s ≤ Emax (intervallo di rappresentazione della caratteristica)
Esempio: dividere i numeri di macchina
x’ = 0.30200·10-2, y’ = 0.15000·103 (β=10, t=5)
La mantissa di x’ è maggiore di quella di y’, dunque m’x = 0.030200 e
r = 1. Quindi
mz = 0.030200 / 0.15000 = 0.2013333
Si ha s = p – q + r = -4,
z’ = 0.20133·10-4
38. Considerazioni sull’aritmetica
di macchina
In aritmetica di macchina non valgono le seguenti (*):
- proprietà associativa per prodotto e somma: può accadere che
fl(fl(x’+y’)+z’) ≠ fl(x’+fl(y’+z’)) ≠ fl(fl(x’+z’)+y’)
fl(fl(x’*y’)*z’) ≠ fl(x’*fl(y’*z’)) ≠ fl(fl(x’*z’)*y’)
- proprietà distributiva del prodotto rispetto alla somma: può
accadere che
fl(fl(x’+y’)*z’) ≠ fl(fl(x’*z’)+fl(y’*z’))
- legge dell’annullamento del prodotto (fl(x’*y’) = 0 non implica che
uno tra x’ e y’ sia necessariamente uguale a 0)
- unicità dell’elemento neutro rispetto alla somma: può accadere
che fl(x’+y’) = x’ con y’ ≠ 0
(*) si indichi con x’ o con fl(x) il numero di macchina che approssima il numero reale x
39. Considerazioni sull’aritmetica
di macchina
Esempio: non validità delle proprietà associativa della somma
Supponiamo di avere i tre numeri
a = 0.1234567, b = 6666.325, c = -6666.325
e di utilizzare l’aritmetica di macchina con β = 10 e t = 7. Si ha
a’ = 0.1234567·100, b’ = 0.6666325·104, c’ = -0.6666325·104
Eseguiamo la somma dei tre numeri in due modi diversi:
1. z = b’ + c’ calcolo di z’ s = z’ + a’ calcolo di s’
Si ottiene: z = 0; z’ = 0; s = 0.1234567·100; s’ = s
2. z = a’ + b’ calcolo di z’ s = z’ + c’ calcolo di s’
Si ottiene: z = 0.1234567·100 + 0.6666325·104 = 0.66664484567·104
z’ = 0.6666448·104; s = 0.0000123·104; s’ = 0.1230000·100
40. Considerazioni sull’aritmetica
di macchina
Esempio: non unicità dell’elemento neutro per la somma
Siano
x’ = 0.62379·107, y’ = 0.32881·101
due numeri di macchina rappresentati in base β = 10 con t = 5 cifre
per la mantissa. Si ha
z = x’ + y’ = (0.62379 + 0.00000032881)·107 = 0.62379032881·107
z’ = 0.62379·107 = x’
41. Considerazioni sull’aritmetica
di macchina
Esempio: il prodotto di macchina tra due numeri di macchina può
essere nullo anche se entrambi i numeri sono non nulli
Siano
x’ = 1.0·10-30, y’ = 1.0·10-20
due numeri di macchina rappresentati in base β = 2 in precisione
semplice (t = 32 cifre per la mantissa). Il prodotto tra x’ e y’ è
z = x’ * y’ = 1.0·10-50
che il calcolatore arrotonda a 0 (underflow)
42. Errore sulle operazioni di macchina
Se x è un numero reale e x’ è la sua approssimazione di macchina,
valgono le formule equivalenti
x' = x(1 + ε x ), ε x ≤ eps
x − εx
x' = , ηx ≤ eps, ηx =
1 + ηx 1 + εx
Indichiamo con il simbolo # una generica operazione aritmetica.
Il risultato z di un’operazione tra due numeri di macchina x’, y’ può
non essere un numero di macchina: la sua approssimazione z’ è
z ' = z (1 + ε ) = ( x' # y ' )(1 + ε ), ε ≤ eps
oppure z x' # y '
z' = = , η ≤ eps
1+ η 1+ η
43. Errore sulle operazioni di macchina
z ' = z (1 + ε ) = ( x' # y ' )(1 + ε ), ε ≤ eps
Tenendo conto delle espressioni di x’ e y’
x' = x(1 + ε x ), y ' = y (1 + ε y ), ε x , ε y ≤ eps
si ha
z ' = ( x(1 + ε x )# y (1 + ε y ))(1 + ε ), ε x , ε y , ε ≤ eps
Vediamo ora come si comportano le singole operazioni elementari
nel dettaglio
44. Errore sulle operazioni di macchina
Somma
Sia S = x + y la somma algebrica di due numeri reali x e y; la somma
calcolata risulta essere
S ' = ( x(1 + ε x ) + y (1 + ε y ))(1 + ε ), ε x , ε y , ε ≤ eps
L’errore relativo che si commette, trascurando i termini quadratici
·
dell’errore (simbolo =), risulta
S '− S · x y
εS = = εx + εy + ε
S x+ y x+ y
In dettaglio e passando ai valori assoluti
x y x y
εS = εx + εy + ε + εxε + εyε
x+ y x+ y x+ y x+ y
N.B.: si dice che
x y f(x) ≤ O(g(x))
≤ +
x+ y x+ y + 1eps + O (eps 2 )
se esiste C > 0 t.c.
|f(x)| ≤ C · |g(x)|
45. Cancellazione di cifre
Consideriamo i numeri reali x = 0.12345789, y = -0.12343211. Siano
x’ = 0.12345·100, y’ = -0.12343·100 le loro approssimazioni di
macchina in base β = 10 con t = 5 cifre per la mantissa.
La somma esatta risulta S = 0.2578·10-4 mentre la somma calcolata
S’ = 0.00002·100 = 0.20000·10-4.
L’errore relativo che si commette è
S '− S
εS = = 0.22420... ≈ 2.2 ⋅10 −1
S
Poiché i due numeri risultavano essere quasi uguali in valore
assoluto ma di segno opposto, la somma delle mantisse ha causato
zeri dopo il punto radice e, dovendo normalizzare il risultato, sono
entrate da destra delle cifre nulle (quelle in rosso). Questa
patologia prende il nome di fenomeno della cancellazione di cifre
46. Errore sulle operazioni di macchina
Moltiplicazione
Sia P = x * y il prodotto algebrico tra due numeri reali x e y; il
prodotto calcolato risulta essere
P' = ( x(1 + ε x ) * y (1 + ε y ))(1 + ε ), ε x , ε y , ε ≤ eps
L’errore relativo che si commette, trascurando i termini quadratici
e cubici dell’errore, risulta
P'− P ·
εP = = εx + ε y + ε
P
In dettaglio e passando ai valori assoluti
εS = ε x + ε y + ε + ε x ε y + ε x ε + ε y ε + ε x ε y ε
≤ 3eps + O (eps 2 )
47. Errore sulle operazioni di macchina
Divisione
Sia Q = x / y la divisione algebrica tra due numeri reali x e y; la
divisione calcolata risulta essere
x(1 + ε x )
Q' = (1 + ε ), ε x , ε y , ε ≤ eps
y (1 + ε y )
Moltiplicando numeratore e denominatore per (1-εy) e trascurando
termini quadratici e cubici, l’errore relativo commesso risulta
Q '−Q ·
εQ = = εx − ε y + ε
Q
In dettaglio e passando ai valori assoluti
εQ = ε x − ε y + ε + ε x ε − ε y ε − ε x ε y − ε x ε y ε
≤ 3eps + O (eps 2 )
48. Errore inerente e errore algoritmico
In generale, l’errore relativo commesso durante il calcolo di
un’espressione razionale φ(x) a partire da un dato x si compone di
due parti: l’errore inerente e l’errore algoritmico
L’errore inerente dipende dal problema ed è dovuto al fatto che il
dato x non è rappresentato in maniera esatta ma attraverso la
corrispondente approssimazione di macchina x’
Dati Risultati
x aritmetica esatta
φ(x)
x’ φ(x’)
49. Errore inerente
Errore relativo sui dati Errore relativo sui risultati
x − x' φ( x) − φ( x' )
εx = εdati =
x φ( x)
Se εdati è grande rispetto a εx, allora il problema si dice mal
condizionato. Quello che succede è che a piccole variazioni sui dati
corrispondono grandi variazioni sui risultati
Il condizionamento è una caratteristica inerente al problema che
si sta affrontando ed esprime quanto esso sia sensibile ad una
variazione dei dati
50. Condizionamento
Le operazioni di moltiplicazione e di divisione tra due numeri reali
sono problemi ben condizionati
ε P ≤ 3eps + O (eps 2 ) , εQ ≤ 3eps + O (eps 2 )
L’operazione di somma tra due numeri reali è un problema ben
condizionato a meno che non abbiano valore assoluto molto simile e
segno opposto. In tal caso, l’errore relativo può essere grande e,
come abbiamo visto, si ha il fenomeno della cancellazione di cifre
x y
εS ≤ +
x+ y x+ y + 1eps + O (eps 2 )
51. Errore inerente e errore algoritmico
L’errore relativo commesso durante il calcolo di un’espressione
razionale φ(x) a partire da un dato x si compone di due parti:
l’errore inerente e l’errore algoritmico
L’errore algoritmico non dipende intrinsecamente dal problema ma
dipende dall’algoritmo usato per risolvere il problema stesso
Dati Risultati
x aritmetica esatta
φ(x)
fl(φ(x’))
52. Errore algoritmico e stabilità
Errore relativo sui risultati
φ( x) − fl (φ( x))
εalg =
φ( x)
Un algoritmo si dice stabile se l’errore relativo generato εalg è
piccolo, ovvero se l’algoritmo non è troppo sensibile agli errori
introdotti con le operazioni di macchina richieste dell’algoritmo
stesso
Al contrario del condizionamento, la stabilità è una proprietà
dell’algoritmo e non del problema
53. Errore totale
L’errore totale deve tener conto sia della presenza di dati
approssimati sia degli errori introdotti ad ogni operazione
elementare dall’algoritmo usato per risolvere il problema
In prima approssimazione, l’errore totale è dunque la somma
dell’errore inerente e dell’errore algoritmico
Dati Risultati
x aritmetica esatta
φ(x)
x’ fl(φ(x’))
54. Somma di tre numeri
Esempio: siano a, b, c numeri reali di cui si vuole calcolare la somma
s=a+b+c
Errore inerente (dati perturbati, aritmetica esatta)
dati: a ' = a (1 + ε a ), b' = b(1 + εb ), c ' = c(1 + εc ), εa , εb , εc ≤ eps
algoritmo: 1. ~ = a '+b'
z 2. v = ~ + c'
z
s−v · a b c
errore: ε dati = = εa + εb + εc
s a+b+c a+b+c a+b+c
Errore algoritmico (dati esatti, aritmetica di macchina)
dati: a ' = a, b' = b, c' = c
algoritmo: 1. z = ( a + b)(1 + ε1 ) 2. w = ( z + c )(1 + ε 2 ), ε1 , ε 2 ≤ eps
ˆ ˆ
s−w · a+b
errore: ε alg = = ε1 + ε2
s a+b+c
55. Somma di tre numeri
Esempio: siano a, b, c numeri reali di cui si vuole calcolare la somma
s=a+b+c
Errore totale (dati perturbati, aritmetica di macchina)
dati: a ' = a (1 + ε a ), b' = b(1 + εb ), c ' = c(1 + εc ), εa , εb , εc ≤ eps
algoritmo: 1. z ' = ( a '+b' )(1 + ε1 ) 2. s ' = ( z '+ c ' )(1 + ε2 ), ε1 , ε2 ≤ eps
errore:
s − s' · a b c a+b
εtot = = εa + εb + εc + ε1 + ε2
s a+b+c a+b+c a+b+c a+b+c
errore inerente errore algoritmico