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