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