Rappresentazione in oating-point Utilizzata per rappresentare numeri frazionari nella notazione esponenziale: numero = (mantissa) 2esponente Il formato piu utilizzato e quello IEEE P754, rappresentato su 32 bit nel seguente modo: S 8 bit esponente 23 bit mantissa (modulo) L'esponente e rappresentato come numero senza segno su 8 bit in eccesso 127, cioe i valori da -126 a +127 sono messi in corrispondenza con i valori da 0 a 255, per non dovere gestire anche il segno dell'esponente. c 1992 - 96 - L.Farinetti, C.Fornaro, A.Lioy, M.Poncino (POLITO - DAI) SN-AB.35 Floating-point: mantissa La mantissa e codicata in modulo e segno su 24 bit, la mantissa e sempre normalizzata nella forma 1:XXXXX si rappresenta solo la parte frazionaria nei 23 bit meno signicativi il peso del MSB del modulo e 2; il segno e dato dal MSB dei 32 bit 1 La rappresentazione di un numero e quindi nella forma numero = 1:XXXXX 2 Y Y Y Y 2 ( c 1992 - 96 - L.Farinetti, C.Fornaro, A.Lioy, M.Poncino (POLITO - DAI) ) SN-AB.36 Conversione decimale ! IEEE P754 Per trasformare un numero decimale N nella sua rappresentazione in oating-point, si deve trasformarlo in binario trasformarlo nella forma normalizzata 1:XXXXX 2 Y Y Y Y 2 il segno e 0 per i numeri positivi, 1 per i negativi l'esponente e pari a 127+ n, dove n e il numero di ( ) posizioni di cui e stato spostato il punto decimale dalla forma binaria a quella normalizzata la parte frazionaria della mantissa normalizzata (XXXXX ) si memorizza nei 23 bit meno signicativi c 1992 - 96 - L.Farinetti, C.Fornaro, A.Lioy, M.Poncino (POLITO - DAI) SN-AB.37 Esempio - oating-point Convertire in formato oating-point IEEE P754 il numero 13:25 10 il numero e positivo, per cui il segno e 0 il numero convertito in binario puro e : 1101:01 spostando il punto decimale di 3 posizioni, il numero si normalizza in 1:10101 2 l'esponente in eccesso 127 vale: 127 + 3 = 130 = 10000010 2 2 3 2 La rappresentazione richiesta e: 0 10000010 10101000000000000000000 c 1992 - 96 - L.Farinetti, C.Fornaro, A.Lioy, M.Poncino (POLITO - DAI) SN-AB.38 Conversione IEEE P754 ! decimale L'interpretazione di un numero e piuttosto complicata: chiamando s il segno, e l'esponente, ed m la mantissa, si possono avere i seguenti casi: e=0, m=0: il valore e (;1)s (0), cioe +0 o -0 e=0, m6=0: il numero e nella forma non norma- lizata 0 < e < 255: il numero e nella forma (;1)s 2 e; (1:m) e=255, m=0: il valore e (;1)s 1, cioe un numero innitamente grande o piccolo (+1 o ;1) e=255, m6=0: non e un numero valido (detto NAN, Not A Number); puo essere usato per codicare informazioni di errore ( 127) c 1992 - 96 - L.Farinetti, C.Fornaro, A.Lioy, M.Poncino (POLITO - DAI) SN-AB.39 Floating Point (Virgola Mobile) Overflow: Se il risultato di un’operazione è in modulo più grande del numero massimo rappresentabile Underflow: Se il risultato di un operazione è compreso tra zero e il minimo numero rappresentabile Single Precision: E: 8 bit (eccesso 127), M: 23 bit (normalizzata), S=1 bit Æ 32 bit Double Precision: E: 11 bit (eccesso 1023), M: 52 bit (normalizzata), S=1 bit Æ 64 bit Quadruple Precision: E: 15 bit (eccesso 32767), M: 112 bit (normalizzata), S=1 bit Æ 128 bit Rappresentazione Fixed Point (Virgola Fissa) • Viene definito: • il numero di bit per la rappresentazione (16 o 32) • la posizione del punto che rimane fissa • parte intera Æ algoritmo conversione da base 10 a base 2 di numeri interi • parte frazionaria Æ algoritmo conversione da base 10 a base 2 di numeri interi Rappresentazione Floating Point (Virgola Mobile) • Inizio anni 80 Æ non esisteva una convenzione universale sul floating-point: R = M ⋅bE • Calcolatori IBM: E Æ 7 bit riferito alla base b=16 • Calcolatori DIGITAL: E Æ 8 bit riferito alla base b=2 • 1985 Æ Standard IEEE 754 31 30 23 22 0 e s m esponente E=e-127 mantissa Parte frazionaria di M segno della mantissa ( 0= +, 1= - ) Rappresentazione Floating Point (Virgola Mobile) 0.03125 1. Ricondurlo nella forma: E Æ R = M ⋅2 10 0.0312510 = 1.0 ⋅ 2−5 mantissa normalizzata!! 2. Rappresentare separatamente i due numeri M ed E. 31 30 23 22 0 0 0111101 00000000000000000000000 Esponente: -5 in notazione eccesso 127 Bit di segno: 0 Mantissa: hidden bit:1, tutti gli altri a 0 Floating Point (Virgola Mobile) Single Precision (interpretazione dell’esponente): E: 8 bit (eccesso 127), M: 23 bit (normalizzata), S=1 bit Æ 32 bit 0 00000000 00000000000000000000000 = 0 1 00000000 00000000000000000000000 = -0 L’esponente varia dal valore 1 a 254 (da -126 a 127) Si parla di numeri normalizzati. 0 00000001 00000000000000000000000 = 1,0 x 2-126 Î Numero normalizzato + piccolo 0 11111110 11111111111111111111111 = 1,1..1 x 2127 circa 2 x 2128 Î Numero normalizzato + grande L’esponente 0 (0000 0000) individua i numeri denormalizzati (ovvero quelli dove l’hidden bit vale 0 e non 1) E’ utilizzato per rappresentare numeri più piccoli. Quindi il + piccolo numero rappresentabile è: 0 00000000 00000000000000000000001 = 0,00000000000000000000001 x 2-126 =2-149 L’esponente 255 (1111 1111) rappresenta l’infinito quando la mantissa è costituita da tutti 0 mentre rappresenta il valore speciale NaN altrimenti 0 11111111 00000000000000000000000 = Infinito 1 11111111 00000000000000000000000 = -Infinito 0 11111111 00000100000000000000000 = NaN (basta una mantissa diversa da 1) Floating Point (Virgola Mobile) Double Precision: E: 11 bit (eccesso 1023), M: 52 bit (normalizzata), S=1 bit Æ 64 bit Quadruple Precision E: 15 bit (eccesso 16383), M: 112 bit (normalizzata), S=1 bit Æ 128 bit Overflow: Se il risultato di un’operazione è in modulo più grande del numero massimo rappresentabile Underflow: Se il risultato di un operazione è compreso tra zero e il minimo numero rappresentabile Codici BCD E' una codica per rappresentare numeri decimali in binario (Binary Coded Decimal). Il numero decimale viene suddiviso nelle cifre decimali che lo compongono, e ciascuna di queste convertita in binario puro secondo la corripondenza: cifra 0 1 2 3 4 5 6 7 8 9 codice 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 c 1992 - 96 - L.Farinetti, C.Fornaro, A.Lioy, M.Poncino (POLITO - DAI) SN-AB.41 Esempi - codici BCD Esempio: convertire il numero 1592 in codice BCD. 1 5 # 9 # 2 # # 0001 0101 1001 0010 Quindi 1592 = 0001010110010010BCD . 10 Esempio: ricavare il numero decimale corrispondente al numero 01011000000001000111BCD 0101 1000 0000 0100 0111 # 5 # 8 # 0 # 4 # 7 Quindi 01011000000001000111BCD = 58047 . 10 c 1992 - 96 - L.Farinetti, C.Fornaro, A.Lioy, M.Poncino (POLITO - DAI) SN-AB.42