Rappresentazione in virgola mobile 5 ottobre 2015 Punto della situazione Abbiamo visto le rappresentazioni dei numeri: • Sistema posizionale pesato per interi positivi (nella varie basi) • Sistema posizionale pesato per numeri con la virgola positivi (frazioni proprie) • Modulo e segno per interi col segno • Complemento a 2 per interi col segno Adesso rappresentazione in virgola mobile per numeri reali/con virgola e segno (con troncamento) Numeri Reali • Frazioni proprie • Potrebbero essere rappresentati in binario puro 1001.1010 = 23 + 20 +2-1 + 2-3 =9.625 • Ma dove è posizionata la virgola (punto decimale)? • In una posizione fissata (virgola fissa)? Soluzione con molti limiti • In una posizione mobile (virgola mobile)? Come facciamo ad indicare dove si trova? Rappresentazione in Virgola Mobile (b=10) Il numero 12345.6789012345 può essere scritto come: 12345.6789012345 * 100 1234.56789012345 * 101 123.456789012345 * 102 12.3456789012345 * 103 1.23456789012345 * 104 0.123456789012345 * 105 …………. 12345.6789012345 * 100 123456.789012345 * 10-1 1234567.89012345 * 10-2 12345678.9012345 * 10-3 123456789.012345 * 10-4 1234567890.12345 * 10-5 ………………… Rappresentazione in Virgola Mobile (b=2) Il numero 10111. 1101011101 può essere scritto come: 10111.1101011101 * 20 1011.11101011101 * 21 101.111101011101 * 22 10.1111101011101 * 23 1.01111101011101 * 24 0.101111101011101 * 25 …… 10111.1101011101 * 20 101111.101011101 * 2-1 1011111.01011101 * 2-2 10111110.1011101 * 2-3 101111101.011101 * 2-4 1011111010.11101 * 2-5 …… Notazione scientifica • Notazione scientifica in base 10: N= (-1) s M 10exp s=segno positivo se s=0, negativo se s=1 M=Mantissa numero decimale con parte intera uguale a 0 exp = esponente opportuno (intero) Esempi: +75,221 = (-1) 0 0,75221 102 - 7522,1 = (-1) 1 0,75221 104 +0,0089= (-1) 0 0,89 10-2 • Notazione scientifica in base 2: N= (-1) s M 2exp s=segno positivo se s=0, negativo se s=1 M=Mantissa numero decimale con parte intera uguale a 0 exp = esponente opportuno (intero) Esempi: +11,001 = (-1) 0 0,11001 22 - 1100,1 = (-1) 1 0,11001 24 +0,0011= (-1) 0 0,11 2-2 Notazione scientifica normalizzata La rappresentazione in virgola mobile che adotteremo si basa sulla notazione scientifica normalizzata • Notazione scientifica normalizzata in base 2: N= (-1) s M 2exp s = segno positivo se s=0, negativo se s=1 M = Mantissa numero decimale con parte intera uguale a 1 exp = esponente opportuno (intero) Esempi: +11,001 = (-1) 0 1,1001 21 - 1100,1 = (-1) 1 1,1001 23 +0,0011= (-1) 0 1,1 2-3 • Suddivide i 32 bit (singola precisione) in: – 1 bit per il segno – 8 bit per rappresentare l’esponente – 23 bit per rappresentare la mantissa Standard IEEE 754: segno • Il segno è dato da (-1)s • Analogamente alla rappresentazione in complemento a 2: Il bit s=0 rappresenta numeri positivi Il bit s=1 rappresenta numeri negativi singola precisione: Mantissa Standard IEEE 754: esponente • Vogliamo usare gli 8 bit per rappresentare esponenti interi negativi e positivi • Se usassimo la rappresentazione in complemento a 2, con 8 bit potremmo rappresentare: [-128, +127] 1 0000000 = - 27 = - 128 1 0000001 = -27 +1 = - 127 ……….. Il confronto non risulta naturale! 1 1111110 =-2 1 1111111 =-1 0 0000000 = 0 0 0000001 = +1 0 0000010 = +2 …. 0 1…10 = 27 – 2= +126 0 1 …11 = 27 - 1 =+127 Standard IEEE 754: polarizzazione • Vogliamo rappresentare esponenti interi negativi e positivi • Usiamo la rappresentazione in binario; con 8 bit potremmo rappresentare: [0, +255] • 0 = 000000 lo riserviamo a zero • 255 = 11111111 a infinito e NaN • Gli altri interi da [1, +254] li usiamo per rappresentare l’intervallo [-126, +127] sottraendo 127 (polarizzazione) (per averne circa metà positivi e metà negativi) Campo esponente (8bit) • • • • • • • • 00000000 = 0 RISERVATO (per lo 0) 00000001 = 1 rappresenta 1-127 =-126 00000010 = 2 rappresenta 2-127 =-125 00000011 = 3 rappresenta 3-127=-124 ………………… 11111101 = +253 rappresenta 253-127=+126 11111110 = +254 rappresenta 254-127=+127 11111111 = +255 RISERVATO (ad infinito e NaN) : esempi Numeri rappresentabili in FP NOTA: 210 = 1024 103 2127 = (210 )12 27 1036 102 = 1038 • Numeri positivi: minimo: + (1, 00….00)22-126= 2-126 = 2 2-127 23 210 10 -38 = 0, 00…………02 Da provare! Massimo: + (1, 11….11)22+127= 2(1 – 2 -24) 2+127 210 10+38 = 2 00.000. …. .000 • Numeri negativi: intervallo simmetrico Numeri Rappresentabili con 32 bit (Complemento a 2 e Virgola Mobile) numeri rappresentabili -231 231-1 0 numeri negativi rappresentabili underflow overflow overflow -(1-2-24) 2128 numeri positivi rappresentabili -127 -0.5 -222-127 0 22 0.5 2-127 (1-2-24) 2128 Aritmetica in virgola mobile Algoritmo La somma algebrica è più complicata! Troppo difficile? • Esiste anche la doppia precisione su 64 bit (1-1152) (double in C) • Non studieremo moltiplicazione e divisione • Le istruzioni MIPS che studieremo tratteranno numeri rappresentati in complemento a 2. Per esempio: add, sub,… • Il MIPS supporta anche il formato IEEE 754 a singola (e doppia) precisione con istruzioni particolari: Per esempio: add.s, sub.s,… Riepilogo e riferimenti • I numeri in virgola mobile e lo standard IEEE 754 a singola precisione • Somma in virgola mobile: [PH] par. 3.5 (fino a ‘La somma in virgola mobile’) • Abbiamo finito le rappresentazioni dell’informazione. Dalla prossima volta: algebra di Boole e circuiti combinatorici • Faremo un test sul programma fin qui svolto, cioè tutte le rappresentazioni e conversioni studiate. Venerdì 9 ottobre?