Di Parola Umberto e Pani Lara
Aritmetica di
macchina
Operazioni di macchina
Numeri di macchina
Numeri di macchina
?
Spazio limitato sul calcolatore
Rappresentazione in virgola
mobile o Floating-point
Approssimazione
Errore assoluto (Ea) |(x - x°)|
Errore relativo (Er) |(x - x°)/x|
Precisione di macchina o ε di
macchina (eps)
Data una mantissa di t cifre, l’approssimazione può avvenire per
Troncamento
Arrotondamento
• Escludo la parte destra della
t-esima cifra
• Errore relativo elevato
• Errore assoluto: |x - x°| < β-t
• eps=N1-t
• Aggiungo ½ N-t alla
mantissa in questione e poi
tronco quest’ultima alla tesima cifra
• Errore relativo basso
• Errore assoluto: |x - x°| < ½
β-t
• eps= ½ N1-t
t=6
1,2659298  1,26592
Er = (1,2659298 - 1,26592)/1,2659298
= 7,74 *10-6
1,2659298  1,26593
Er = (1,2659298 - 1,26593)/1,2659298
= -1,58*10-8
le operazioni di macchina (funzionali all’applicazione di operazioni
aritmetiche ai numeri macchina), che a due numeri macchina ne
associano un terzo, ottenuto arrotondando (attraverso le tecniche
precedentemente viste) l’esatto risultato dell’operazione aritmetica in
questione.
eps, |ε| ≤ eps
Sia ε l’errore relativo
della rappresentazione
di x (ε = (fl(x) – x)/x ⇒
fl(x) = x (1 + ε))
fl(x)
l’operazione
di
approssimazione di x a
numero di macchina in
aritmetica floating-point
fl(x) = x(1 + ε), |ε| ≤ eps
a ⊕ b = fl(fl(a) + fl(b)) = (fl(a) + fl(b))(1 +ε1), |ε1| ≤ eps;
a ---- b = fl(fl(a) − fl(b)) = (fl(a) − fl(b))(1 +ε2), |ε2| ≤ eps;
a ⊗ b = fl(fl(a) × fl(b)) = (fl(a) × fl(b))(1 +ε3), |ε3| ≤ eps;
a // b = fl(fl(a) / fl(b)) = (fl(a) / fl(b))(1 +ε4), |ε4| ≤ eps.
• Principio di equivalenza:
si definiscono equivalenti due espressioni che in aritmetica
finita forniscono risultati la cui distanza relativa differisce
di una quantità dell’ordine della precisione di macchina.
• Proprietà
• Rappresentazione in linguaggio Java
• Overflow e underflow
Propietà
Non tutte le proprietà delle operazioni aritmetiche si
conservano per le operazioni di macchina.
La proprietà commutativa per somma e prodotto si
conserva anche per le operazioni di macchina:
a ⊕ b = b ⊕ a, a ⊗ b = b ⊗ a,
Ma non valgono più le seguenti proprietà:
• a ⊕ (b ⊕ c) ≠ (a ⊕ b) ⊕ c,
• a ⊗ (b ⊗ c) ≠ (a ⊗ b) ⊗ c,
• a ⊗ (b ⊕ c) ≠ (a ⊗ b) ⊕ (a ⊗ c),
• (a ⊗ b) // b ≠ a,
• (a // b) ⊗ b ≠ a,
• (a ⊗ b) // c ≠ (a // c) ⊗ b.
Rappresentazione in Java
Overflow e Underflow
elaborazione eccedente, per numero di cifre rispettivamente
positive e negative, il limite della capacità di una memoria.
ERRORE
Errore
Cancellazione numerica: Si dice cancellazione numerica il
fenomeno di perdita di cifre significative che si verifica quando
si opera una sottrazione tra due numeri di macchina “quasi
uguali” tra loro (ovvero, il risultato è più piccolo di ciascuno dei
due operandi). TUTTAVIA, la sottrazione non genera problemi
in sé, ma amplifica errori di approssimazione già esistenti sugli
operandi.
Applicazione di algoritmi: Valutando l’algoritmo nella sua
stabilità numerica e nella qualità del condizionamento del
problema rispetto a cui è applicato, si giunge ad ipotizzare
l’incidenza di tre tipi di errori.
Più nello specifico, considerando un generico problema di
partenza descritto da una funzione esplicita y = f(x), si ha…
fl(x1) = 0.191019 · 103 , fl(x2) = 0.191017 · 103
fl(x1) ----- fl(x2) = 0.000002 · 103 = 0.200000 · 10-2
 fl(x1) = 0.191020 · 103 , fl(x2) = 0.191017 · 103
 fl(x1) ----- fl(x2) = 0.000003 · 103 = 0.300000 · 10-2
[|(fl(x1) ----- fl(x2)) − (x1 − x2)| ]/ [|(x1 − x2)|] = 0.1363
Nel campo pratico tali forme di errore possono essere, in certi casi,
parzialmente ridotte (ma non evitate) tramite il ricorso a formulazioni
alternative, dove il fenomeno della cancellazione numerica si riduce di
entità:
Esempio 1: Le radici di un equazione di secondo grado (x2
- 2ax + ε = 0) si trasformano ne seguente modo, al fine di
evitare l’applicazione della sottrazione, che produce un
maggiore errore (obbiettivo condiviso anche con i successivi
esempi): x1= a + √a2 - ε e x2 = a - √a2 - ε = ε/x1.
Esempio 2: √x + ε - √ε = ε/(√x + ε + √x).
Esempio 3: cos(x+ε) – cos(x) = -2sin(ε/2) sin(x + ε/2).
• un errore x - x°, al quale corrisponde un errore finale,
dovuto non all’algoritmo, ma unicamente alla funzione f(x)
(condizionamento): e1 = f(x) – f(x°).
• Un errore derivante dal fatto che spesso f viene
approssimata con una funzione più semplice f1 (algoritmo);
in questo caso abbiamo un ulteriore errore, detto di
troncamento o discretizzazione: e2 = f(x°) – f1 (x°).
• Infine, le operazioni eseguite dal calcolatore nella
valutazione di f1(x°) non sono esatte: invece del valore f1(x°)
otterremo un valore f2(x°). L’errore: e3= f1 (x°) – f2(x°) , è
dovuto alla propagazione degli errori di arrotondamento
nel calcolo numerico f1(x°), di cui è responsabile la stabilità
numerica dell’algoritmo.
Ecco come si riscontra l’errore in Java
(terzo caso)
Bibliografia
• “100 pagine di elementi di calcolo numerico” di
G.Monegato;
• “Informatica 3 quinto anno licei scientifici opzione
scienze applicate” di Piero Gallo e Pasquale Sirsi;
Sitografia
• https://www.youtube.com/ (nella stesura de “video”);
• http://www.dm.uniba.it/~delbuono/floating_eliaiavernaro.
pdf;
• http://calvino.polito.it/~sberrone/Faculty/01ILRFW.2011/
1_RappresentazioneNumeri.pdf;