Esercitazione n. 5 Rappresentazione dei numeri - Cremona

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