Rappresentazione di Numeri Reali
• Un numero reale è una grandezza analogica
(continua) e quindi è rappresentabile solo in
modo approssimato.
• Esistono due forme per rappresentare un
numero reale
– Segno, parte intera, parte decimale
(rappresentazione in virgola fissa)
– Segno, mantissa, esponente
(rappresentazione in virgola mobile)
Rappresentazione in virgola fissa
(fixed-point)
• Utilizzando una rappresentazione su N bit si assume
che la posizione della virgola sia fissa in un preciso
punto all’interno della sequenza. Quindi si
assegnano k bit per la parte intera e N-k bit per la
parte decimale
NB In una rappresentazione di tipo posizionale le cifre
alla destra della virgola vengono moltiplicate per
potenze negative della base
Es.
(5.75)10 = 5*100 + 7*10-1 + 5*10-2
(11.011)2 = 1*21 + 1*20 + 0*2-1 + 1*2-2 + 1*2-3
Conversione decimale-binario di
numeri non interi
• La parte intera si converte col metodo delle divisioni
successive
• Per la parte alla destra della virgola:
– si moltiplica la parte a destra della virgola per 2
– si prende la parte intera del risultato come cifra utile
– si ripetono i 2 passi precedenti finché la parte a
destra della virgola non diventa 0
Es.
19.375
Sappiamo che (19)10 = (10011)2
0.375 * 2
= 0.75
0.75 * 2
= 1.5
0.5 * 2
= 1.0
Quindi (19.375)10 = (10011.011)2
Osservazione importante
Non è detto che un numero che ha una
rappresentazione finita in una base, abbia una
rappresentazione finita anche in un’altra.
Es.
1/3 = (0.1)3 = (0.33333….)10
L’unico caso in cui questo avviene sicuramente è
quando si converte da una base ad un’altra che ne è
una potenza.
Es.
(101011100110.011)2 = (5346.3)8
Rappresentazione in virgola mobile
(floating-point)
• Ricorda la notazione scientifica dei numeri
• Si riescono a manipolare numeri con ordini di
grandezza molto differenti utilizzando per la
rappresentazione un insieme limitato di bit
• Nel formato esponenziale un numero N viene
espresso nella seguente forma
N  m  b
e
• b base del sistema di numerazione
• m mantissa del numero
• e esponente
Rappresentazione in virgola mobile
(floating-point)
N  m  b
e
b è 2 (la base è prefissata)
Quindi per rappresentare un numero reale ci basta
rappresentare mantissa ed esponente. La mantissa si
suppone in virgola fissa con la virgola all’inizio,seguita
sempre da 1 (MSB).
Es (decimale)
(binario)
123.45
=
.12345 * 103
11.1011 =
.111011 * 22
Ricorda: moltiplicare (dividere) un numero per una
potenza della base equivale a far scorrere a sinistra
(destra) il numero di un numero di posizioni pari
all’esponente
Rappresentazione standard
• Su 32 bit
– 1 bit per segno del numero
– 8 bit per esponente (generalmente
rappresentato in complemento a due)
– 23 bit per la parte frazionaria della mantissa
– la parte non frazionaria (0) e la prima cifra
(1) della mantissa vengono sottintese
– 0 può avere segno positivo o negativo
Somma di due numeri in virgola mobile
Quando si fanno somme, anche a mano, per
sommare due numeri è necessario incolonnarli.
In una rappresentazione in virgola mobile questo
significa uguagliare gli esponenti.
Es. (decimale)
123.5 + 1240.3
In virgola mobile
.1235 * 103 + .12403 * 104
Quindi devo per prima cosa riportare i due numeri
all’esponente più grande
123.5 = .01235 * 104 … e poi posso sommare
.01235 +
.12403
-------.13638
Quindi:
123.5 + 1240.3 = .13638 * 104 = 1363.8
Approssimazioni nelle operazioni
in floating point
Quando la distanza fra la cifra più significativa e
quella meno significativa è maggiore del numero di
cifre a disposizione, il numero deve essere troncato:
si trascurano cioè le cifre meno significative per le
quali “non c’è spazio”.
Es. Supponendo di usare 4 bit per la mantissa
10 + 0.5
10 = .1101 * 24
0.5 = 0.1 * 20
Il risultato sarebbe 0.11011 * 24 , ma ho solo 4 bit
Quindi il risultato è 0.1101 * 24, e quindi 10+0.5=10!
Approssimazioni nelle operazioni
in floating point
Apparente paradosso:
10.5 non è rappresentabile con 4 bit, ma 15 sì!
15 = .1111 * 24
Per avere un’idea della precisione con cui opera un
calcolatore (numero N di bit con cui rappresenta la
mantissa in floating point) si definisce precisione di
macchina (epsilon) il più piccolo numero che
sommato a 1 dà un risultato diverso da 1.
Maggiore è N, più piccolo è epsilon.