Esercitazione n. 5 Rappresentazione dei numeri dott. Carlo Todeschini – [email protected] – Politecnico di Milano – A.A. 2009/2010 Queste slide sono distribuite con licenza Creative Commons Attribuzione-Non commerciale-Condividi allo stesso modo 2.5 Italia Rappresentazione dei numeri /1 Rappresentazione di un numero reale in virgola fissa +/Segno I-1 I-2 ... Parte intera 0 -1 -2 ... -D Parte frazionaria N2 = s aI-1 aI-2 .... a0 b-1 b-2 ... b-D N10 = (-1)s x ( a0 x 20 + a1 x 21 + ... + aI-1 x 2I-1 + b-1 x 2-1 + b-2 x 2-2 + ... + b-D x 2-D ) Esercitazioni di Fondamenti di Informatica – Politecnico di Milano sede di Cremona – A.A. 2010/2011 – Carlo Todeschini – [email protected] 2 Rappresentazione dei numeri /2 Conversione da un numero binario in virgola fissa a decimale: 10011.011 ➢ ➢ ➢ Segno: Parte intera: Parte decimale: 1 (1 = numero negativo; 0 = numero positivo) 1 x 20 + 1 x 21 + 0 x 22 + 0 x 23 = 1 + 2 = 3 0 x 2-1 + 1 x 2-2 + 1 x 2-3 = 0.25 + 0.125 = 0.375 Il numero ottenuto è: ­3.375 Esercitazioni di Fondamenti di Informatica – Politecnico di Milano sede di Cremona – A.A. 2010/2011 – Carlo Todeschini – [email protected] 3 Rappresentazione dei numeri /3 Convertire i seguenti numeri binari in virgola fissa a decimale: 11101.101 010111010.1101011 Risultato: 11101.101 => 010111010.1101011 => -13.625 186.8359375 Esercitazioni di Fondamenti di Informatica – Politecnico di Milano sede di Cremona – A.A. 2010/2011 – Carlo Todeschini – [email protected] 4 Rappresentazione dei numeri /4 Rappresentazione binaria di un numero frazionario ➢ ➢ si moltiplica per 2 e nel risultato si separa la parte intera (che è sempre 0 o 1); si ripete il procedimento fino a quando il risultato della moltiplicazione è 1.000... oppure si raggiunge il numero di cifre binarie dedicate alla codifica della parte frazionaria. Rappresentare in binario il numero 0.453125: 0.453125 x 2 = 0.90625 => 0 0.90625 x 2 = 1.8125 => 1 0.8125 x 2 = 1.625 => 1 0.625 x 2 = 1.25 => 1 0.25 x 2 = 0.5 => 0 0.5 x 2 = 1.0 => 1 Il numero in binario è: 0.011101 Esercitazioni di Fondamenti di Informatica – Politecnico di Milano sede di Cremona – A.A. 2010/2011 – Carlo Todeschini – [email protected] 5 Rappresentazione dei numeri /5 Convertire i seguenti numeri frazionari in binari: 0.15625 0.73543 Risultato: 0.15625 0.73543 => 0.00101 => 0.101111001... Esercitazioni di Fondamenti di Informatica – Politecnico di Milano sede di Cremona – A.A. 2010/2011 – Carlo Todeschini – [email protected] 6 Rappresentazione dei numeri /6 Rappresentazione di un numero reale in virgola mobile con lo standard IEEE 754 1 bit 8 bit 23 bit Segno [ s ] Esponente [ e ] Mantissa [ m ] Nota: lo schema riportato è per codifica con 32 bit (float); in caso di codifica con 64 bit (double) si usano 11 bit per l'esponente e 52 bit per la mantissa N10 = (-1)s x 1.m x 2e - 127 dove 1.m denota il numero binario razionale composto da un 1, seguito dal punto decimale, seguito dai bit presenti nella parte riservata alla mantissa ed e (da 1 a 254 compresi) la codifica decimale dell'esponente. Nota: forma normalizzata Esercitazioni di Fondamenti di Informatica – Politecnico di Milano sede di Cremona – A.A. 2010/2011 – Carlo Todeschini – [email protected] 7 Rappresentazione dei numeri /7 Rappresentazione di un numero reale in virgola mobile con lo standard IEEE 754: casi particolari ➢ Infinito, ∞, quando e=255 e m=0 ➢ NaN (Not a Number, ossia valore indefinito) quando e=255 e m è diverso da 0; usato in caso di operazioni con risultato indefinito come 0/0 o ∞/∞. ➢ Zero, quando e=0 e m=0. Esercitazioni di Fondamenti di Informatica – Politecnico di Milano sede di Cremona – A.A. 2010/2011 – Carlo Todeschini – [email protected] 8 Rappresentazione dei numeri /8 Conversione di un numero reale in binario con virgola mobile 1. porre a 0 il bit di segno se il numero è positivo altrimenti a 1 se è negativo 2. convertire in binario la parte intera del numero 3. convertire la parte frazionaria (ottenuta sottraendo al numero reale la parte intera) 4. normalizzare il numero binario ottenuto convertendo parte intera e parte frazionaria (si sposta la virgola verso sinistra di p posizioni fino a ottenere il numero binario espresso nella forma normalizzata, cioè 1.xxxxxx). Il numero binario ottenuto viene moltiplicato per la potenza di 2 elevato a p. La mantissa m è la sequenza di bit dopo la virgola 5. calcolare l'esponente e sommando a p il numero 127 e codificare in binario su 8 bit l'esponente trovato. Esercitazioni di Fondamenti di Informatica – Politecnico di Milano sede di Cremona – A.A. 2010/2011 – Carlo Todeschini – [email protected] 9 Rappresentazione dei numeri /9 Conversione di un numero reale in binario con virgola mobile Convertire il numero -612.1875 nella rappresentazione binaria IEEE 754 in virgola mobile float 1. porre a 0 il bit di segno se il numero è positivo altrimenti a 1 se è negativo s = 1 2. convertire in binario la parte intera del numero 612 => 29 + 26 + 25 + 22 = 1001100100 Esercitazioni di Fondamenti di Informatica – Politecnico di Milano sede di Cremona – A.A. 2010/2011 – Carlo Todeschini – [email protected] 10 Rappresentazione dei numeri /10 Conversione di un numero reale in binario con virgola mobile Convertire il numero -612.1875 nella rappresentazione binaria IEEE 754 in virgola mobile float 3. convertire la parte frazionaria (ottenuta sottraendo al numero reale la parte intera) 0.187510 = 00112 4. normalizzare il numero binario ottenuto 1001100100.0011 => 1.0011001000011 x 29 => (p=9) m = 0011001000011 Esercitazioni di Fondamenti di Informatica – Politecnico di Milano sede di Cremona – A.A. 2010/2011 – Carlo Todeschini – [email protected] 11 Rappresentazione dei numeri /11 Conversione di un numero reale in binario con virgola mobile Convertire il numero -612.1875 nella rappresentazione binaria IEEE 754 in virgola mobile float 5. calcolare l'esponente e sommando a p il numero 127 e codificare in binario su 8 bit l'esponente trovato e = p + 127 = 9 + 127 = 136 = 100010002 Il numero è: s|e |m 1 10001000 00110010000110000000000 Esercitazioni di Fondamenti di Informatica – Politecnico di Milano sede di Cremona – A.A. 2010/2011 – Carlo Todeschini – [email protected] 12 Rappresentazione dei numeri /12 Conversione di un numero reale in binario con virgola mobile Convertire i seguenti numeri nella rappresentazione binaria IEEE 754 in virgola mobile float: 1574.873 ­234987 Soluzione: 1574.873 -234987 => => 01000100110001001101101111110000 11001000011001010111101011000000 Esercitazioni di Fondamenti di Informatica – Politecnico di Milano sede di Cremona – A.A. 2010/2011 – Carlo Todeschini – [email protected] 13 Rappresentazione dei numeri /13 Conversione di un numero binario in reale con virgola mobile 1. individuare il segno s 2. individuare l'esponente e; k = e – 127 3. impostare j => 1.m (m sono i bit che compongono la mantissa) 4. spostare a destra di k posizioni il punto decimale di j 5. convertire in decimale la parte intera di j 6. convertire in decimale la parte frazionaria di j Esercitazioni di Fondamenti di Informatica – Politecnico di Milano sede di Cremona – A.A. 2010/2011 – Carlo Todeschini – [email protected] 14 Rappresentazione dei numeri /13 Conversione di un numero binario in reale con virgola mobile Dato il seguente numero a 32 bit in rappresentazione binaria IEEE 754, indicarne l'equivalente numero reale: 01000000010010010000111111011011 (è un numero “famoso”) Esercitazioni di Fondamenti di Informatica – Politecnico di Milano sede di Cremona – A.A. 2010/2011 – Carlo Todeschini – [email protected] 15