Rappresentazione dei numeri Tommaso Motta T. Motta Rappresentazione dei numeri
Punto della situazione Abbiamo imparato diversi sistemi di numerazione (in particolare in base 2) Ma i numeri interi sono caratterizzati da modulo e segno Fino ad ora non ci siamo preoccupiamo del segno Adesso ci chiediamo come un PC può rappresentare i numeri, con modulo e segno T. Motta Rappresentazione dei numeri
Prima di iniziare: il concetto di Overflow Qualunque sia il numero di bit usati per rappresentare un numero in un calcolatore, esso permetterà la rappresentazione di interi in un range FINITO. I calcolatori non operano sui numeri naturali ma su loro sottoinsiemi finiti Somma e differenza di interi non sono sempre definite in tali insiemi; ad esempio se ho: Riporto dal bit più significativo Prestito richiesto dal bit più significativo allora il numero di bit fissato non è sufficiente per rappresentare il risultato. Questa condizione si chiama OVERFLOW T. Motta Rappresentazione dei numeri
Esempi di overflow Il risultato non è rappresentabile su 4 bit in entrambi i casi T. Motta Rappresentazione dei numeri
Codifica dei numeri interi Nell’aritmetica binaria vi sono varie tecniche di rappresentazione dei numeri interi con segno Modulo e segno Complemento alla base (complemento a 2) ... T. Motta Rappresentazione dei numeri
Rappresentazione modulo e segno Convenzione: uso il bit più significativo (= di peso maggiore) per rappresentare il segno L’intervallo di valori rappresentabili su n bit è: T. Motta Rappresentazione dei numeri
Problemi della rappresentazione in modulo e segno Ci sono 2 inconvenienti in questa rappresentazione: Si hanno due rappresentazioni per lo “0” 1 0...0 e 0 0...0 La somma di numeri con segno diverso porta a risultati scorretti: 0001 + 1001 = 1010 . 1 + -1 = -2 . ovvero T. Motta Rappresentazione dei numeri
Rappresentazione dei numeri Complemento alla base Si definisce complemento alla base di un numero A in base b, rappresentato con n cifre, il numero Ā = bn – |A| Quando b = 2 (base 2) il complemento alla base viene detto complemento a 2 Il complemento a 2 di un numero viene ottenuto invertendo tutti i bit (0 diventa 1, 1 diventa 0) e aggiungendo 1 T. Motta Rappresentazione dei numeri
Rappresentazione dei numeri con complemento alla base Questo metodo permette di risolvere i problema del “doppio zero” e dell’addizione COME SI RAPPRESENTANO I NUMERI: per i numeri positivi: si tiene la codifica in binario del numero per i numeri negativi: rappresento in binario il valore assoluto del numero inverto tutti i bit sommo 1 Esempio: -35 (35)10 = (00100011)2 (-35)10 = (11011101)2 T. Motta Rappresentazione dei numeri
Rappresentazione dei numeri con complemento alla base Qual è il complemento a 2 dello zero? L’intervallo di valori rappresentabili su n bit in complemento a 2 è ora: Viene recuperato il valore “sprecato” per il secondo zero Ad esempio, i valori rappresentabili su 8 bit vanno da –128 a 127 T. Motta Rappresentazione dei numeri
Somma (e sottrazione) di numeri in complemento a 2 Per sommare numeri rappresentati in complemento a due si devono trattare i numeri come interi senza segno, ovvero si considera il bit di segno come qualunque altro bit del numero, e non si tiene conto dell’eventuale riporto della posizione più a sinistra Esempio: -710 = 110012 +1010 = 010102 11001 + 01011 = 100011 . Non viene considerato = 310 T. Motta Rappresentazione dei numeri
Rappresentazione dei numeri Riassumendo T. Motta Rappresentazione dei numeri
Numeri in virgola mobile Come abbiamo già visto, non ci sono solo numeri interi ma anche numeri con la virgola Supponiamo inoltre di voler rappresentare un intero molto grande, come ad esempio duemila miliardi: N = (2 000 000 000 000)10 Avremmo bisogno di ben 41 bit per rappresentarlo come unsigned (o 42 come int) La maggior parte dello spazio sarebbe sprecato per conservare informazione sugli zeri: in effetti si può usare la notazione scientifica e scrivere, in modo molto più compatto: N = 2,0 x 1012 T. Motta Rappresentazione dei numeri
Numeri in virgola mobile Notazione: N = 2,0 x 10 12 base esponente mantissa T. Motta Rappresentazione dei numeri
Standard IEEE 75 per la rappresentazione dei numeri in virgola mobile Rappresento il numero in binario, convertendo parte intera e parte frazionaria Il numero binario ottenuto viene trasformato in notazione normalizzata, cioè: ± 1,M x 2E dove: M = Mantissa E = Esponente T. Motta Rappresentazione dei numeri
Numeri in virgola mobile a precisione singola Lo standard IEEE 754 prevede che un numero reale floating point sia rappresentato con 4 byte: 1 bit per il segno 8 bit per l’esponente 23 bit per la mantissa T. Motta Rappresentazione dei numeri
Numeri in virgola mobile a precisione doppia (double) Numero rappresentato con 8 byte: 1 bit per il segno 11 bit per l’esponente 52 bit per la mantissa T. Motta Rappresentazione dei numeri
Rappresentazione dei numeri Esponente I bit degli esponenti vengono utilizzati per rappresentare sia esponenti positivi che negativi Per la rappresentazione dell’esponente viene utilizzato un metodo particolare: esponente biased L’esponente è rappresentato nella forma bias + E il valore del bias dipende dal numero di bit utilizzati per l’esponente se i bit nell’esponente sono n, il bias vale 2n/2 – 1 per 8 bit vale 127 per 11 bit vale 1024 T. Motta Rappresentazione dei numeri
Rappresentazione dei numeri Mantissa Il numero di bit riservati alla mantissa determina il numero di cifre significative che si possono utilizzare (cioè la precisione) la cifra 1 prima della virgola è sottointesa, quindi si hanno 24 bit di mantissa in precisione singola 53 bit di mantissa in precisione doppia T. Motta Rappresentazione dei numeri
Riepilogo Precisione singola Bias = 127 il valore 127 corrisponde allo 0 come esponente Tutti gli esponenti negativi sono compresi tra 1 e 126 (quindi hanno primo bit = 0) Tutti gli esponenti positivi sono compresi tra 128 e 255 (quindi hanno primo bit = 1) Ordine di grandezza dei numeri rappresentabili: da 2-127 a 2128 La precisione della mantissa è di 24 cifre binarie, quindi 6-7 cifre decimali significative... T. Motta Rappresentazione dei numeri
Riepilogo Precisione doppia Bias = 1023 il valore 1023 corrisponde allo 0 come esponente Ordine di grandezza dei numeri rappresentabili: da 2-1023 a 21024 La precisione della mantissa è di 53 cifre binarie, quindi 15-16 cifre decimali significative... T. Motta Rappresentazione dei numeri
Operazioni con notazione floating point Si possono sommare due numeri floating point solo se hanno lo stesso esponente se l’esponente è uguale si sommano le mantisse e si mantiene l’esponente comune se gli esponenti non sono uguali, devono essere resi uguali (trasformo numero con esponente più grande) il risultato deve poi essere normalizzato T. Motta Rappresentazione dei numeri
Errori dovuti alla rappresentazione floating point La precisione “limitata” e gli arrotondamenti nei risultati delle operazioni causano alcuni problemi: le operazioni di confronto possono dare risultati inaspettati non valgono più le proprietà commutativa associativa distributiva T. Motta Rappresentazione dei numeri