Rappresentazione dei Numeri Rappresentazione dei Numeri • Il sistema numerico binario è quello che meglio si adatta alle caratteristiche del calcolatore • Il problema della rappresentazione consiste nel trovare un metodo per codificare i numeri utilizzando le risorse a disposizione – Dimensioni della memoria a disposizione – Numeri razionali o periodici Numeri grandi e piccoli • Le dimensioni della memoria sono sempre finite • E’ possibile rappresentare solo i numeri compresi in un intervallo – Underflow: limite inferiore dei numeri rappresentabili – Overflow: limite superiore Numeri frazionari e periodici • I numeri frazionari e/o periodici sono composti da un numero infinito di cifre • È possibile rappresentare solo una parte del numero (la più significativa) – Troncamento: errore compiuto eliminando parte del numero Numeri interi Positivi • La dimensione della memoria disponibile è misurata in bit • Il massimo numero rappresentabile in n bit è 2n • Se, in conseguenza di operazioni aritmetiche, il numero diventa “troppo grande” vengono rappresentate le cifre meno significative! • 1101 + 1111 = 1100 !!!!! Numeri con segno • Le rappresentazioni dei numeri interi relativi sono: – Modulo e segno – Complemento a 2 – Complemento ad 1 • Sono possibili anche altre rappresentazioni Modulo e segno • Problema: rappresentare un numero intero x con segno avendo a disposizione n bit • Soluzione: il bit di peso maggiore (quello più a sinistra) si utilizza per rappresentare il segno, i rimanenti n-1 bit rappresentano il modulo n = 5, x = -12 r(x) = 11100 n = 5, x = 13 r(x) = 01101 • limite di underflow = -2n-1 -1 • limite di overflow = 2n-1 -1 • Due rappresentazioni per lo zero !! Complemento a 2 • Definizione: dato un numero x ed n cifre si definisce complemento alla base b il numero bn – x • Problema: rappresentare un numero intero x con segno avendo a disposizione n bit • Soluzione: il numero viene rappresentato usando le prime n cifre (a destra) del numero 2n + x. n = 5, x = -12 r(x) = 25 + (-12) = 20 = 10100 n = 5, x = 13 r(x) = 25 + (13) = 45 = 101101 • limite di underflow = -2n-1 • limite di overflow = 2n-1 -1 • Unica rappresentazione per lo zero !! Operazioni e Rappresentazione • L’algoritmo risolutivo della somma algebrica usando la rappresentazione in modulo e segno è più complesso – Se i due numeri hanno lo stesso segno si sommano i valori assoluti – Se i due numeri hanno segno diverso devo scegliere quello di modulo maggiore e sottrarre il secondo – Se il segno del maggiore … Operazioni e Rappresentazione (cont.) • Nel caso della rappresentazione in complemento a 2 la somma di numeri relativi si ottiene sommando le loro rappresentazioni • L’operazione di complemento a 2 è semplice Numeri decimali • Rappresentazione in virgola fissa – Il punto decimale occupa una posizione prefissata. – Il segno è rappresentato dal bit di peso maggiore • Limiti di overflow: -2L-F-1 <= N <= 2L-F-1-1 • Errore di troncamento: |e| < 2-F Numeri decimali • Rappresentazione in virgola mobile – La posizione del punto varia dinamicamente – Ogni numero reale N è rappresentato dalla coppia (m,E) dove N = m * bE – Standard P754, N = 1,m * 2E • 1 bit di segno • 23 bit per la mantissa (eliminando la prima cifra) • 8 bit per l’esponente (eccesso 127) Esempio • -13.25 – Convertiamo il numero in base binaria -1101.01 – Rappresentiamo il numero nella forma 1.m*2E = -1.10101 * 2 3 – Esprimiamo l’esponente in notazione polarizzata (o eccesso 127) E = 130 – Rappresentiamo il numero supponendo di avere a disposizione 32 bit. Operazioni in virgola mobile • Per sommare correttamente i due numeri, si deve allineare la virgola del numero che ha l'esponente più piccolo. Quindi il primo passo esegue lo scalamento a destra della mantissa del numero più piccolo, fino a che il suo esponente non coincide con quello del numero più grande. • Si esegue la somma delle mantisse • Se la somma ottenuta non è in notazione scientifica normalizzata è necessario correggerla. Quindi a valle della somma può essere necessario eseguire un suo scalamento per portarla alla forma normalizzata, con un opportuno aggiustamento dell'esponente. Ogni volta che l'esponente è incrementato o decrementato, si deve controllare se si è verificato un overflow o underflow, cioè ci si deve accertare che l'esponente continui ad essere rappresentabile all'interno del suo campo. • Arrotondamento della mantissa: si tronca il numero se la cifra a destra del punto desiderato è compresa tra 0 e 4, e si somma 1 alla cifra se il numero a destra è compreso tra 5 e 9. Esiste un caso sfortunato per l'arrotondamento, consiste nel dover sommare un 1 ad una stringa di 9: la somma può non essere più normalizzata ed occorre eseguire di nuovo il passo 3. Altro • Possibili alternative allo standard m.0 * bE m rappresentato in complemento a 2 (segno) m.0 * bE (segno) 0.m * bE (segno) 1.m * bE E rappresentato in modulo e segno, complemento a 2 o notazione polarizzata.