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 come 7,68 x 1 14 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 1 34 Normalizzata 3.634 1 36 Notazione binaria Normalizzata 1.xxx 2 yy Forma standardizzata : IEEE 754 Singola precisione 8 bit esponente, 23 bit mantissa 2 1-38... 2 1 38 Doppia precisione 11 bit esponente, 52 bit mantissa 2 1-38... 2 1 38 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:... esponente minimo 11...111 esponente massimo Bias 127 per singola precisione, 123 per doppia precisione esempio di esponente biased (semplice precisione) : se gli 8 bit dell esponente biased contengono 1111 = 163 allora l esponente vale: 163-127 = 36 se gli 8 bit dell esponente biased contengono 1111 = 39 allora l esponente vale: 39-127 = -88 Valore: (-1) segno (1 + mantissa) 2esponente_biased - bias 5 Esempio Rappresentazione in semplice precisione di: -.75 rappresentazione decimale: -.75 = - 3/4 = - 3 / 2 2 rappresentazione binaria: -11 2-2 = -.11 = - 1.1 2-1 Floating point: bit segno: = 1 mantissa: = 1 +.1... esponente biased: = (-1 + 127) = 126 1 1 1 1 1 1 segno 1 1 bit esponente biased 111111 8 bit mantissa 1 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. 2 Emin Meccanismo per gestire eccezioni Formato: segno ± esponente biased E mantissa 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 Emin 1.234 1 Emin / 1 =.123 1 Emin.123 1 Emin / 1 =.12 1 Emin.12 1 Emin / 1 =.1 1 Emin.1 1 Emin / 1 =. 1 Emin 8 4
Numeri speciali biased (= + 127): tra 1 e 254 possibile rappresentare altri numeri speciali esponente 1-254 255 255 mantissa non zero qualsiasi non zero tipo non normalizzato floating point num ±infinito 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..1 2 = 1 1 (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 1 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..1 2 = 254 1 (valore corrispondente 127) quindi un esponente non è mai 11..11 2 (=255 1 ) 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 1 1 + 1.61 1-1? risultato: 1.2 1 2 Allineamento dei due numeri 9.999 1 1.161 1 1 troncamento.16 1 1 Addizione delle mantisse 9.999 1 1 +.16 1 1 1.25 1 1 Normalizzazione del risultato 1.25 1 2 Arrotondamento 1.2 1 2 13 Moltiplicazione floating point P.H. p. 22 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