Fondamenti di Informatica 1

Fondamenti di Informatica - 1
Prof. B.Buttarazzi
A.A. 2011/2012
Sommario
• Operazioni aritmetiche tra numeri in virgola mobile
– Algoritmi
– Esempi
• Errore di rappresentazione (assoluto e relativo)
• Approssimazione dei numeri reali ( arrotondamento,
troncamento)
• Esercizi
21/03/2012
2
Operazioni tra numeri in Virgola Mobile:
somma e sottrazione
1) L’esponente più piccolo viene reso uguale al più grande
spostando la mantissa verso destra del numero di cifre
pari alla differenza tra gli esponenti (shift per ottenere un
corretto incolonnamento)
2) Le mantisse vengono sommate o sottratte
3) Se necessario, la mantissa viene rinormalizzata e l’esponente
corretto
Operazioni tra numeri in Virgola Mobile:
somma e sottrazione
1) L’esponente più piccolo viene reso uguale
al più grande spostando la mantissa
verso destra del numero di cifre pari alla
differenza tra gli esponenti (shift per
ottenere un corretto incolonnamento)
2) Le mantisse vengono sommate o sottratte
3) Se necessario, la mantissa viene
rinormalizzata e l’esponente corretto
A=1.01 • 22
B= 1.1101• 21
B= 0.11101• 22
Esercizio
Eseguire 510 + 3.62510 assumendo una precisione di 4 bit
Esercizio
Eseguire 510 + 3.62510 assumendo una precisione di 4 bit
Soluzione
510 = 1012 = 1.01 • 22
3.62510= 11.1012• 20 = 1.1101• 21
= 0.11101• 22
1.01000 +
0.11101 =
---------------10.00101 • 22
Normalizzazione: 1.000101 • 23
Arrotondamento: 1.0001 • 23
Operazioni tra numeri in Virgola Mobile:
moltiplicazione e divisione
1) Gli esponenti vengo sommati o sottratti
2) Le mantisse vengono moltiplicate o divise
3) Se necessario, la mantissa viene rinormalizzata e
l’esponente corretto
Operazioni tra numeri in Virgola Mobile:
moltiplicazione e divisione
1) Gli esponenti vengo sommati o
sottratti
2) Le mantisse vengono moltiplicate o
divise
3) Se necessario, la mantissa viene
rinormalizzata e l’esponente corretto
Esercizio
Eseguire 1.0000 *2 -1 * (1.1100 * 2 -2 ) assumendo lo standard IEEE 754 in
semplice precisione
Esercizio
Eseguire 1.0000 *2 -1 * (1.1100 * 2 -2 ) assumendo lo standard IEEE 754 in
semplice precisione
Soluzione
0 01111110
000000000000….000
=127-1 = 126
0000…..
1.000 *
1 01111101
1100000000000…00
1.110 =
=127-2=125
1100……
Calcolo esponente.
------1+-2= -3+127 = 124
0000 +
Nuovo esponente: 01111100
1000 +
Calcolo prodotto mantisse.
1000 +
1.000 * 1.110 =1.110
1000 +
Normalizzazione e controllo overflow e/o underflow.
è già a posto
-----------------Arrotondamento ok
1110000 = 1.110000
Segno - =1
Risultato
1 01111100 11000000000000000000000
Problemi con l’uso dei numeri
in virgola mobile
3/21/2012
11
Problemi con l’uso dei numeri
in virgola mobile
Formule matematicamente equivalenti possono dare
risultati diversi.
Per esempio, nella maggior parte delle applicazioni
in virgola mobile,
1,0 + (10100 + -10100) da come risultato 1,0
mentre (1,0 +10100 )+ -10100) + da 0,0.
3/21/2012
12
Errore assoluto
Quando si rappresenta un numero reale n in notazione floating
point si può commettere un errore di approssimazione dovuto al
fatto che abbiamo a disposizione un numero limitato di cifre (t)
che ci permetteranno di rappresenteremo il numero razionale n’ , la
differenza eA= n-n’ si chiama errore assoluto.
ERRORE ASSOLUTO: eA= n-n’
Questa grandezza, benché fornisca un’indicazione precisa
dell’errore commesso, non permette di valutare l’entità dell’errore
in termini percentuali.
Errore relativo
Per conoscere quanto un errore influenzi il risultato (quando n≠0)
si deve introdurre l’errore relativo:
ERRORE RELATIVO: eR = eA /n= (n-n’)/n
Ad esempio se consideriamo le seguenti approssimazioni
n’= 2 di n = 1
e
n’= 1001 di n = 1000
In entrambi i casi avremo un errore assoluto pari a uno, ma mentre nel primo caso l’errore
relativo ((n-n’)/n = 1-1/1) che (in valore assoluto) è pari a 1 corrisponde al 100% del valore a cui
è riferito (ho sbagliato 1 su 1) nel secondo caso ( (n-n’)/n = 1000-1001/1000) ) è pari a un
millesimo e corrisponde allo 0,1% del valore a cui è riferito (infatti ho sbagliato 1 su 1000).
Dal punto di vista dell’approssimazione, è evidente che mentre un errore dello 0,1% potrebbe
essere accettabile un errore del 100% non lo è affatto!
Errore relativo
Per conoscere quanto un errore influenzi il risultato quando n≠0, si
definisce l’errore relativo:
ERRORE RELATIVO: eR = eA /n= (n-n’)/n
Osservazione
L’errore relativo deve essere comparato a 1.
Un errore relativo vicino a zero indicherà che il risultato approssimato è molto vicino al risultato
esatto, mentre un errore relativo uguale a 1 indicherà la totale perdita di informazione.
L’errore relativo non è influenzato dall’ordine di grandezza dei numeri che si stanno
considerando ma è legato al numero di cifre di n’,a partire dalla prima, che coincidono con
quelle di n.
Errore assoluto e relativo
Esempi
Sia n=3,141592653≃ π
n’=3.1415
L’errore assoluto è 0.000092653 ma
l’errore relativo è: 0.000092653 /3,141592653
eR = ≃ 0.000029492.
Errore assoluto e relativo
ERRORE ASSOLUTO: eA = n-n’
ERRORE RELATIVO: eAR= eA /n = (n-n’)/n
Osservazione
• L’ordine di grandezza dell’errore assoluto dipende dal numero
di cifre significative e dall’ordine di grandezza del numero
• L’ordine di grandezza dell’errore relativo dipende solo dal
numero di cifre significative
Esempio
Errore assoluto e relativo
ERRORE ASSOLUTO: eA = n-n’
ERRORE RELATIVO: eAR= eA /n = (n-n’)/n
Osservazione
L’errore relativo non è influenzato dall’ordine di grandezza dei numeri che si stanno
considerando ma è legato al numero di cifre di n’,a partire dalla prima, che coincidono con
quelle di n.
Se la mantissa è normalizzata l’errore relativo è costante.
Esempio
Precisione di una rappresentazione
Se rappresentiamo numeri con una precisione fino alla t-esima cifra frazionaria
l’eventuale errore assoluto sarà < 2-t
Arrotondamento / Troncamento
Quando dobbiamo rappresentare in virgola mobile un numero reale
x che richiede un numero di cifre per la mantissa normalizzata
superiore a quelle disponibili (t) la determinazione di x’ ( il
floating point più vicino x) può avvenire in due modi:
per arrotondamento
o per troncamento
Arrotondamento / Troncamento
Esempio
t=2 x= 2,2510
Eventi legati a errori di arrotondamento:
Missile Patriot
MISSILE PATRIOT
Il 25.02.1991, durante la guerra del Golfo, in Arabia Saudita, un
missile Patriot mancò l'intercettazione di uno SCUD (missile
iracheno) che distrusse una caserma americana.
A causa di analoghi errori di intercettazione altri missili SCUD
sono riusciti a colpire il territorio israeliano.
Successivamente fu riscontrato che il motivo di ciò era dovuto a
errori di arrotondamento nel calcolo del tempo.
In particolare, il tempo, calcolato in decimi di secondo nel
computer dei PATRIOT, poi veniva moltiplicato per 10 per ottenere
il tempo in secondi.
Questi calcoli venivano eseguiti con un formato a virgola fissa con
registri a 24 bit.
Sfortunatamente, il numero 0.1 non ha una rappresentazione finita
in binario pertanto il troncamento e la successiva moltiplicazione
per 10 comportava l'insorgere di errori significativi.
Il semplice troncamento produceva un errore assoluto pari a circa
0.000000095.
Eventi legati a errori di arrotondamento:
Razzo Ariane V
Razzo ARIANE
Il 04.06.1996 Ariane V, un razzo costruito dall’ESA
(European Space Agency) per posizionare in orbita dei
satelliti) precipitò 37 secondi dopo il lancio dalla base
spaziale di Kourou nella Guyana Francese
http://www.youtube.com/watch?v=kYUrqdUyEpI.
La distruzione del razzo e del suo carico provoco una perdita
di centinaia di milioni di dollari.
Il guasto alla base del fallimento, accertato dopo lunghe
indagini, fu dovuto ad una erronea conversione di un numero
floating point a 64 bit (correlato alla velocità orizzontale del
razzo rispetto alla piattaforma) in un intero a 16 bit. Il
numero convertito, risultando maggiore del massimo intero
rappresentabile pari a 32768, provocò un overflow nella
misura della velocità orizzontale con il conseguente
spegnimento dei motori ed esplosione del razzo.
Il 13.02.2012 sempre da Kourou è partito con successo il
nuovo razzo europeo VEGA(Vettore Europeo Generazione
Avanzata) progettato e costruito per conto dell’ESA quasi
totalmente in Italia.
ESERCIZIO
Determinare quante e quali cifre binarie sono necessarie per
convertire in virgola fissa il numero (1,76)10 con un errore assoluto
inferiore a 1/100, successivamente effettuare la conversione del
numero.
3/21/2012
24
Soluzione
Per convertire con una precisione di almeno 1/50 un numero
frazionario deve essere verificato
(ricordando che 25=32,26=64)
pertanto occorrono 6 cifre binarie per la parte frazionaria.
Nel caso di 1,76 si opera la conversione
3/21/2012
25
Troviamo ora la rappresentazione binaria di 1,76
Per la parte intera si ha 1.
Effettuando la trasformazione in binario della parte frazionaria (0.76) si ottiene:
Conversione della parte frazionaria (per moltiplicazioni successive)
.76* 2 = 1.52 parte intera = 1
.52* 2 = 1.04 parte intera = 1
.04* 2 = 0.8 parte intera = 0
.8 * 2 = 0.16 parte intera = 0
.16 * 2 = 0.32 parte intera = 0
.32* 2 = 0.64 parte intera = 0
0.64*2=1,28 parte intera = 1
0,28*2=0.56 parte intera = 1
0,56*2=1,12parte intera = 1
…….
(0.76) 10 ≃ (.110000) 2 Volendo una approssimazione alla 6 cifra frazionaria.
La rappresentazione in virgola fissa del numero 1,76 sarà quindi:
1.11000 per un totale di 7 cifre.
ESERCIZIO
Determinare quante e quali cifre binarie sono necessarie per
convertire in virgola fissa il numero (0,12)10con un errore assoluto
inferiore a 1/100, successivamente effettuare la conversione del
numero.
3/21/2012
27
ESERCIZIO
Elencare tutti i numeri rappresentabili con 6 bit:
• 1 bit di segno, 3 di esponente e 4 di mantissa
Seguendo le stesse regole dello standard IEE754
3/21/2012
28
Standard IEEE 754
3/21/2012
29
Configurazioni particolari
Lo Standard IEEE 754 attribuisce valori convenzionali a
particolari configurazioni di E ed m
A) E ed m tutti 0 rappresentano il valore 0 (altrimenti non
rappresentabile)
B) m tutti 0 ed E tutti 1 rappresentano l’overflow
C) m != 0 ed E tutti 1 indicano la situazione Not A Number
(NAN), cioè un valore indefinito (ad es. il risultato di una
divisione per 0)
Queste convezioni sono una caratteristica peculiare della
notazione IEEE 754; ( se non esplicitamente definite, non
valgono per altre notazioni)