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 )
TroncamentoArrotondamento 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 =N 1-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 = ½ N 1-t t = 6 1, 1,26592 Er = (1, ,26592)/1, = 7,74 * , 1,26593 Er = (1, ,26593)/1, = -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 Rappresentazione in linguaggio Java Overflow e underflow 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 numericaCancellazione 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: 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) = · 10 3, fl(x2) = · 10 3 fl(x1) fl(x2) = · 10 3 = · fl(x1) = · 10 3, fl(x2) = · 10 3 fl(x1) fl(x2) = · 10 3 = · [|(fl(x1) fl(x2)) − (x1 − x2)| ]/ [|(x1 − x2)|] =
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 (x 2 - 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): x 1 = a + √a 2 - ε e x 2 = a - √a 2 - ε = ε/x 1. 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): e 1 = f(x) – f(x°). Un errore derivante dal fatto che spesso f viene approssimata con una funzione più semplice f 1 (algoritmo); in questo caso abbiamo un ulteriore errore, detto di troncamento o discretizzazione: e 2 = f(x°) – f 1 (x°). Infine, le operazioni eseguite dal calcolatore nella valutazione di f 1 (x°) non sono esatte: invece del valore f 1 (x°) otterremo un valore f 2 (x°). L’errore: e 3 = f 1 (x°) – f 2 (x°), è dovuto alla propagazione degli errori di arrotondamento nel calcolo numerico f 1 (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 (nella stesura de “video”); pdf; pdf 1_RappresentazioneNumeri.pdf; 1_RappresentazioneNumeri.pdf