Di Parola Umberto e Pani Lara. Aritmetica di macchina Numeri di macchina Operazioni di macchina.

Post on 02-May-2015

215 views 1 download

Transcript of Di Parola Umberto e Pani Lara. Aritmetica di macchina Numeri di macchina Operazioni di macchina.

Aritmetica finita &

Propagazione dell’errore 

Di Parola Umberto e Pani Lara

Aritmetica di macchina

Numeri di macchina

Operazioni di macchina

Numeri di macchina

Rappresentazione in virgola mobile o Floating-point?Spazio limitato sul calcolatore

Approssimazione

Errore assoluto (Ea) |(x - x°)| Errore relativo (Er) |(x - x°)/x|

Precisione di macchina o ε di macchina (eps)

Troncamento Arrotondamento

Data una mantissa di t cifre, l’approssimazione può avvenire per

• 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 t-esima cifra

• Errore relativo basso• Errore assoluto: |x - x°| <

½ β-t

• eps= ½ N1-t

t = 6

1,2659298 1,26592Er = (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

Sia ε l’errore relativo della rappresentazione di x (ε = (fl(x) – x)/x ⇒ fl(x) = x (1 + ε))

eps, |ε| ≤ eps

fl(x) = x(1 + ε), |ε| ≤ eps

fl(x) l’operazione di approssimazione di x a numero di macchina in aritmetica floating-point

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.

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 Underflowelaborazione 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)