Rappresentazione dei Numeri in Virgola Mobile

Rappresentazione dei
Numeri in Virgola Mobile
Metodi Numerici
Esercizio 4
Verificare se i due scripts seguenti terminano come ci si aspetta:
Introduzione
I computer usano un numero finito di bit pe
rappresentare un numero reale, quindi sono
rappresentabili solo un sottoinsieme finito dei numeri
reali. Di conseguenza:
1. non possono essere rappresentati numeri
arbitrariamente grandi o piccoli
2. c'e un gap tra due numeri macchina consecutivi
Per esprimere i numeri si usa la rappresentazione in
virgola mobile o floating point che si basa sulla notazione
esponenziale normalizzata.
Notazione Esponenziale Normalizzata
Sia x ϵ R, x≠0, l’espressione:
x = (-1)s d0.d1d2d3…dt-1 βe = (-1)s m βe = (-1)s ∑i=0,..,t-1 diβi
si definisce notazione esponenziale normalizzata di x in base
β l'espressione dove
• s è il segno di x
• β è un intero > 1 e corrisponde alla base
• e è l'esponente
• m è la mantissa m = d0.d1d2d3…dt-1, in cui 0≤di≤β-1
Esempio: la rappresentazione esponenziale normalizzata in
base dieci di 0.00078391 è 7.8391*10-4. In Matlab diventa
7.8391*E-4 oppure 7.8391*e-4
Insieme dei numeri floating point
Dato dei limiti L<0 e U>0 entro cui è compreso
l’esponente e, L≤e≤U, si definisce il seguente insieme
di numeri:
F(β,t,L,U) = {0} U {x ϵ R : x = (-1)s ∑i=0,..,t-1 diβ-i}
Per avere unicità nella rappresentazione di solito si
pone di=1 e si dice che la rappresentazione è
normalizzata
Insieme dei numeri floating point
Si ha che x ϵ F se e solo se -x ϵ F.
Per ogni x ϵ F, x ≠ 0, si ha che:
xmin = βL ≤ |x| ≤ βU (2 – β-t+1) = xmax
In pratica, non è possibile rappresentare alcun numero,
tranne lo zero, minore in valore assoluto di xmin.
Per superare questo limite si introduce l’insieme FD dei
numeri denormalizzati, ma solo quando l’esponente e=L
(senza compromettere l’unicità della rappresentazione),
per cui si ha:
xmin,D = βL-t+1 ≤ |x| ≤ βL (1 – β-t+1) = xmax,D
Esempio: F(2,3,-1,2)
Rappresentazione grafica dei numeri positivi per
F(β=2,t=3,L=-1,U=2):
Standard IEEE 754
• Esistono due rappresentazioni standard a N=32 bit
(single precision) e N=64 bit (double precision):
1. Single precision: 1 bit di segno, 8 bits per l’esponente,
e 23 per la mantissa
2. Double precision: 1 bit di segno, 11 bits per
l’esponente, e 52 per la mantissa
Standard IEEE 754: Esempio
Floating points in Matlab
• Matlab usa lo standard IEEE 754, con numeri in double
precision
• Esistono due variabili predefinite per il minimo e
massimo numero (in valore assoluto) rappresentabile in
doppia precisione:
realmin
realmax
• Ogni operazione che produca un risultato:
1.
2.
3.
maggiore di realmax genera un overflow e assume il
valore Inf;
minore del minimo valore denormalizzato genera un
underflow e assume ilvalore 0.
indefinito (p.e. 0/0, Inf/Inf, Inf-Inf), il risultato assume il
valore NaN (Not A Number)
Esercizio 4
Verificare se i due scripts seguenti terminano come ci si aspetta:
Soluzione Esercizio 4
Epsilon macchina e precisione macchina
Esercizio 6
Esercizio 7
• Si provino le seguenti righe di codice e si commenti
il risultato:
>>
>>
>>
>>
>>
a = 1.0e+308;
b = -a;
c = 1.1e+308;
(a + b) + c
(a + c) + b