Rappresentazione di Numeri Reali • Un numero reale è una grandezza analogica (continua) e quindi è rappresentabile solo in modo approssimato. • Esistono due forme per rappresentare un numero reale – Segno, parte intera, parte decimale (rappresentazione in virgola fissa) – Segno, mantissa, esponente (rappresentazione in virgola mobile) Rappresentazione in virgola fissa (fixed-point) • Utilizzando una rappresentazione su N bit si assume che la posizione della virgola sia fissa in un preciso punto all’interno della sequenza. Quindi si assegnano k bit per la parte intera e N-k bit per la parte decimale NB In una rappresentazione di tipo posizionale le cifre alla destra della virgola vengono moltiplicate per potenze negative della base Es. (5.75)10 = 5*100 + 7*10-1 + 5*10-2 (11.011)2 = 1*21 + 1*20 + 0*2-1 + 1*2-2 + 1*2-3 Conversione decimale-binario di numeri non interi • La parte intera si converte col metodo delle divisioni successive • Per la parte alla destra della virgola: – si moltiplica la parte a destra della virgola per 2 – si prende la parte intera del risultato come cifra utile – si ripetono i 2 passi precedenti finché la parte a destra della virgola non diventa 0 Es. 19.375 Sappiamo che (19)10 = (10011)2 0.375 * 2 = 0.75 0.75 * 2 = 1.5 0.5 * 2 = 1.0 Quindi (19.375)10 = (10011.011)2 Osservazione importante Non è detto che un numero che ha una rappresentazione finita in una base, abbia una rappresentazione finita anche in un’altra. Es. 1/3 = (0.1)3 = (0.33333….)10 L’unico caso in cui questo avviene sicuramente è quando si converte da una base ad un’altra che ne è una potenza. Es. (101011100110.011)2 = (5346.3)8 Rappresentazione in virgola mobile (floating-point) • Ricorda la notazione scientifica dei numeri • Si riescono a manipolare numeri con ordini di grandezza molto differenti utilizzando per la rappresentazione un insieme limitato di bit • Nel formato esponenziale un numero N viene espresso nella seguente forma N m b e • b base del sistema di numerazione • m mantissa del numero • e esponente Rappresentazione in virgola mobile (floating-point) N m b e b è 2 (la base è prefissata) Quindi per rappresentare un numero reale ci basta rappresentare mantissa ed esponente. La mantissa si suppone in virgola fissa con la virgola all’inizio,seguita sempre da 1 (MSB). Es (decimale) (binario) 123.45 = .12345 * 103 11.1011 = .111011 * 22 Ricorda: moltiplicare (dividere) un numero per una potenza della base equivale a far scorrere a sinistra (destra) il numero di un numero di posizioni pari all’esponente Rappresentazione standard • Su 32 bit – 1 bit per segno del numero – 8 bit per esponente (generalmente rappresentato in complemento a due) – 23 bit per la parte frazionaria della mantissa – la parte non frazionaria (0) e la prima cifra (1) della mantissa vengono sottintese – 0 può avere segno positivo o negativo Somma di due numeri in virgola mobile Quando si fanno somme, anche a mano, per sommare due numeri è necessario incolonnarli. In una rappresentazione in virgola mobile questo significa uguagliare gli esponenti. Es. (decimale) 123.5 + 1240.3 In virgola mobile .1235 * 103 + .12403 * 104 Quindi devo per prima cosa riportare i due numeri all’esponente più grande 123.5 = .01235 * 104 … e poi posso sommare .01235 + .12403 -------.13638 Quindi: 123.5 + 1240.3 = .13638 * 104 = 1363.8 Approssimazioni nelle operazioni in floating point Quando la distanza fra la cifra più significativa e quella meno significativa è maggiore del numero di cifre a disposizione, il numero deve essere troncato: si trascurano cioè le cifre meno significative per le quali “non c’è spazio”. Es. Supponendo di usare 4 bit per la mantissa 10 + 0.5 10 = .1101 * 24 0.5 = 0.1 * 20 Il risultato sarebbe 0.11011 * 24 , ma ho solo 4 bit Quindi il risultato è 0.1101 * 24, e quindi 10+0.5=10! Approssimazioni nelle operazioni in floating point Apparente paradosso: 10.5 non è rappresentabile con 4 bit, ma 15 sì! 15 = .1111 * 24 Per avere un’idea della precisione con cui opera un calcolatore (numero N di bit con cui rappresenta la mantissa in floating point) si definisce precisione di macchina (epsilon) il più piccolo numero che sommato a 1 dà un risultato diverso da 1. Maggiore è N, più piccolo è epsilon.