18.01.2015 Views

Appunti di Calcolo Numerico - Esercizi e Dispense - Università degli ...

Appunti di Calcolo Numerico - Esercizi e Dispense - Università degli ...

Appunti di Calcolo Numerico - Esercizi e Dispense - Università degli ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

3. RAPPRESENTAZIONE DEI NUMERI NEL CALCOLATORE<br />

Un numero in floating point nella rappresentazione IEEE viene scritto come<br />

x = ±(1 + f −1 2 −1 + f −2 2 −2 + ... + f −n 2 −n ) × 2 e<br />

dove<br />

G 1+ f −1 2 −1 + f −2 2 −2 +...+ f −n 2 −n è la mantissa, normalizzata, cui sono riservati<br />

un numero n <strong>di</strong> bits,<br />

G e è la potenza della base 2 cui sono riservati un numero Ne <strong>di</strong> bits ed è<br />

limitato a variare in un determinato intervallo [L,U ].<br />

Il primo 1 della mantissa (che corrisponde a f 0 ) non viene messo in memoria ma c’è. La rappresentazione<br />

in virgola mobile può essere schematizzata nel modo seguente (s, e ed f rappresentano i bits riservati rispettivamente<br />

per il segno della mantissa, e per le cifre dell’esponente e della mantissa – ogni celletta può avere<br />

il valore 0 o 1):<br />

s e e e e e ··· ··· e f f f f f ··· ··· f<br />

}{{}<br />

segno<br />

} {{ }<br />

cifre dell’esponente<br />

} {{ }<br />

cifre della mantissa<br />

Abbiamo 1 bit riservato al segno (si ha 0 per il segno + e 1 per il segno −), un numero Ne <strong>di</strong> bits per<br />

l’esponente 2 e , e un numero n <strong>di</strong> bits per la mantissa.<br />

La scelta del numero <strong>di</strong> bits da riservare all’esponente e alla mantissa si basa su un compromesso tra la<br />

<strong>di</strong>mensione dell’esponente (e quin<strong>di</strong> il più piccolo e il più grande numero rappresentabile) e la <strong>di</strong>mensione<br />

della mantissa (e quin<strong>di</strong> la precisione del numero rappresantibile, più o meno cifre decimali).<br />

Nel sistema IEEE, la rappresentazione in singola precisione è a 32 bits mentre quella in doppia precisione<br />

è a 64 bits. La sud<strong>di</strong>visione dei bits tra esponente e mantissa viene ripartita nel modo seguente:<br />

s Ne n # totale bits<br />

Singola precisione 1 8 23 32<br />

Doppia precisione 1 11 52 64<br />

Gli esponenti possono essere sia positivi sia negativi ma si preferisce memorizzarli come interi positivi<br />

(senza segno). Abbiamo dunque bisogno <strong>di</strong> una tecnica che permetta <strong>di</strong> rappresentare esponenti negativi<br />

come interi positivi. La tecnica utilizzata nello standard IEEE è chiamata <strong>di</strong> biasing (<strong>di</strong>storsione): un numero<br />

positivo (detto bias) viene aggiunto all’esponente (sia esso positivo o negativo) in modo che il risultato finale<br />

sia sempre positivo. Ed è questo valore che viene memorizzato per rappresentare l’esponente. L’esponente<br />

viene quin<strong>di</strong> rappresentato in forma biased (parziale, influenzata da un altro numero): se e è l’esponente<br />

effettivo, noi memorizziamo il valore b + e dove b è il bias dato b = 0111...1<br />

} {{ }<br />

, vale a <strong>di</strong>re b = 1 + 2 + 2 2 + ... +<br />

Ne bits<br />

2 Ne−2 +0·2 Ne−1 = 1 − 2Ne−1<br />

= 2 Ne−1 −1 (si veda la nota per capire perchè si ha questo risultato nella somma).<br />

1 − 2<br />

Per trovare il limite superiore e inferiore entro cui può variare e, dobbiamo tener conto del fatto che, nella<br />

rappresentazione IEEE, due patterns <strong>di</strong> bits sono riservati per rappresentare numeri speciali quali lo zero,<br />

infinito e il Not-a-Number, precisamente 0000...0 e 1111...1.<br />

Quin<strong>di</strong>, b + e non può essere uguale nè a 0000...0, nè a 1111...1. Ciò significa che il massimo esponente<br />

che si può rappresentare è dato sottraendo a 1111...1 il valore 1 in base 2, cioè da 1111...1 − 0000...01 =<br />

1111...10.<br />

Si ha b + e ≤ 1111...10, o equivalentemente, 0111...1 + e ≤ 1111...10, da cui ricaviamo<br />

e ≤ 1111...10 − 0111...1 = 0111...1 = b<br />

.<br />

Il limite superiore U è proprio uguale a b.<br />

24

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!