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