Numeri in virgola mobile

Numeri in virgola mobile
PH. 3.6
1
Motivazioni virgola mobile
Rappresentazione in virgola fissa per rappresentare numeri
frazionari
fissando la posizione della virgola su una posizione prestabilita
Le limitazioni:
non rappresenta bene numeri molto grandi
non rappresenta bene numeri (frazioni) molto piccoli
Notazione scientifica:
si esprime 768 000 000 000 000 come 7,68 x 1014
le 14 posizioni dopo il 7 vengono espresse dall’esponente
Notazione scientifica Æ floating point
2
1
Numeri floating point
Motivazioni:
numeri molto grandi o molto piccoli
frazioni
reali del tipo e (2.71828), π (3.14159265....)
Rappresentazione:
± M ⋅ B±E
Segno
Mantissa
Esponente
Base è implicita: non viene rappresentata
Più bits per mantissa: maggior accuratezza
Più bits per esponente: maggior intervallo
3
Numeri floating point
Forma
Arbitraria
363.4 • 1034
Normalizzata
3.634 • 1036
Notazione binaria
Normalizzata
1.xxx • 2yy
Forma standardizzata : IEEE 754
Singola precisione 8 bit esponente, 23 bit mantissa
2 • 10 -38 ... 2 • 1038
Doppia precisione 11 bit esponente, 52 bit mantissa
2 • 10 -308 ... 2 • 10308
Entrambi i formati sono supportati da MIPS
4
2
Standard IEEE 754
Il bit '1' bit più significativo della mantissa è implicito
-> si risparmia 1 bit
Esponente è biased (polarizzato), per avere numeri sempre
positivi:
00...000 esponente minimo
11...111 esponente massimo
Bias 127 per singola precisione, 1023 per doppia precisione
esempio di esponente biased (semplice precisione) :
se gli 8 bit dell’esponente biased contengono 10100011 = 163
allora l’esponente vale: 163-127 = 36
se gli 8 bit dell’esponente biased contengono 00100111 = 39
allora l’esponente vale: 39-127 = -88
Valore:
(-1)segno • (1 + mantissa) • 2esponente_biased - bias
5
Esempio
Rappresentazione in semplice precisione di: - 0.75
ƒ rappresentazione decimale: - 0.75 = - 3/4 = - 3 / 22
ƒ rappresentazione binaria: -11 • 2-2 = - 0.11 = - 1.1 • 2-1
ƒ Floating point:
bit segno:
=1
mantissa:
= 1 + .1000.....
esponente biased: = (-1 + 127) = 126 Î 0 1 1 1 1 1 1 0
segno
esponente
biased
mantissa
1
01111110
100 0000 0000 0000 0000 0000
1 bit
8 bit
23 bit
6
3
Standard IEEE 754
Arrotondamento: quattro modi di arrotondamento
Arrotonda al numero più vicino (default)
Troncamento
Arrotonda verso valore superiore (verso + ∞)
Arrotonda verso valore inferiore (verso - ∞)
Numeri speciali: NaN, + ∞ , - ∞
Numeri non normalizati per risultati più piccoli di 1.0 • 2
Emin
Meccanismo per gestire eccezioni
Formato:
segno
esponente
biased
mantissa
±
E
M
1 bit
8 bit
23 bit
7
Limitazioni
Overflow:
il numero è troppo grande per essere rappresentato
Underflow:
il numero è troppo piccolo per essere rappresentato
Underflow graduale:
se il numero diventa piccolo, diminuisce il numero di cifre
della mantissa. esempio:
1.234
1.234
0.123
0.012
0.001
•
•
•
•
•
10Emin
10Emin
10Emin
10Emin
10Emin
/ 10 = 0.123 • 10Emin
/ 10 = 0.012 • 10Emin
/ 10 = 0.001 • 10Emin
/ 10 = 0.000 • 10Emin
8
4
Numeri speciali
biased (= + 127): tra 1 e 254
possibile rappresentare altri numeri speciali
esponente
mantissa
tipo
0
0
0
0
non zero
non normalizzato
1 - 254
qualsiasi
floating point num
255
0
± infinito
255
non zero
NaN
9
Rappresentazione dello zero
Per rappresentare lo zero:
si usa la intera parola (di 32 o 64 bit) messa a zero
Perché questa rappresentazione è particolare:
gli esponenti (polarizzati) vanno da 00..012 = 110 (valore
corrispondente -126) in poi
quindi l’esponente non è mai zero
In questo caso, la mantissa viene messo tutto a zero
Utilità della rappresentazione:
zero in complemento a due (interi) = zero in virgola mobile
controllo per zero semplice: tutti i bit a zero
10
5
Rappresentazione dell’infinito e NaN
Per rappresentare l’infinito:
si usa l’esponente a tutti uno e mantissa a tutti zero
Perché questa rappresentazione è particolare:
gli esponenti (polarizzati) arrivano fino a 11..102 = 25410
(valore corrispondente 127)
quindi un esponente non è mai 11..112 (=25510)
A seconda del segno: infinito positivo o negativo
Per rappresentare il NaN
si usa l’esponente a tutti uno e mantissa diversa da zero
11
Addizione floating point
Allineamento dei due numeri (stesso esponente)
Addizione delle mantisse
Normalizzazione del risultato e
controllo se overflow o underflow
Arrotondamento
se non normalizzato, va a rinormalizzare
12
6
Addizione floating point: esempio P.H. p. 197
Esempio nel sistema decimale con precisione 4 cifre
addizione: 9.999 • 101 + 1.610 • 10-1 ?
risultato: 1.002 • 102
Allineamento dei due numeri
9.999
• 101
0.01610
• 101 troncamento
0.016
• 101
Addizione delle mantisse
9.999
• 101
+ 0.016
• 101
10.025
• 101
Normalizzazione del risultato
1.0025
• 102
Arrotondamento
1.002
• 102
13
Moltiplicazione floating point
P.H. p. 202
Addizione degli esponenti – bias
Moltiplicazione delle mantisse
Normalizzazione del prodotto
controllo se overflow o underflow
Arrotondamento
se non normalizzato, va a rinormalizzare
Se gli operandi hanno lo stesso segno
segno positivo
altrimenti segni negativo
14
7