Rappresentazione di
dati numerici
Sistemi numerici
• Si suddividono in:
- Non posizionali : quali ad esempio il sistema di numerazione
romano (i cui simboli sono: I, II, III, IV, V, X, L, C, D, M) oppure quello egiziano
- Posizionali : quali ad esempio il sistema arabo (decimale) e il sistema maya (ventesimale).
• Nei sistemi posizionali le operazioni aritmetiche risultano molto agevoli mentre in quelli non posizionali sono
alquanto complicate.
Sistema posizionale a base fissa
• Nei sistemi numerici a base fissa, un numero N può essere rappresentato in uno del seguenti modi:
N = dn-1 dn-2 ... d1 d0 . d-1 ... d-m
N = dn-1· rn-1 + ... + d0· r0 + d-1· r-1 + ... + d-m· r-m
1 n
i i
i m
N d r
−
= −
= ∑ ⋅
Sistemi numerici
• Proprietà di un sistema numerico a base fissa
- è a
rango illimitato
: ogni numero intero vi può essere rappresentato;- è a
rappresentazione unica
: ad ogni numero intero corrisponde un solo insieme ordinato di cifre;- è
irridondante
: ad ogni insieme ordinato di cifrecorrisponde un solo numero non rappresentato da altri insiemi ordinati.
Sistema decimale
• r = 10
• cifre: { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }
- Esempio:
10110 = 1 × 102 + 0 × 101 + 1 × 100
= 100 + 0 + 1
= 10110
Sistema binario
• r = 2
• cifre: { 0, 1 }
- Esempio:
1012 = 1 × 22 + 0 × 21 + 1 × 20
= 4 + 0 + 1 = 510
Sistema ottale
• r = 8
• cifre: { 0, 1, 2, 3, 4, 5, 6, 7 }
- Esempio:
1018 = 1 × 82 + 0 × 81 + 1 × 80
= 64 + 0 + 1 = 6510
• molto utile per scrivere in modo compatto i numeri binari (ad ogni 3 cifre binarie corrisponde una cifra ottale)
( 1 1 0 1 1 0 0 0 1) 2 = ( 6 6 1 ) 8
Sistema esadecimale
• r = 16
• cifre: { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F }
- Esempio:
101H = 1 × 162 + 0 × 161 + 1 × 160
= 256 + 0 + 1 = 25710
• anch’esso utile per scrivere in modo compatto i numeri binari (ad ogni 4 cifre binarie corrisponde 1 cifra
esadecimale)
( 1 1 0 1 1 0 0 0 1) 2 = ( 1 B 1 )
Sistema base 5
• r = 5
• cifre: { 0, 1, 2, 3, 4 }
- Esempio:
1015 = 1 × 52 + 0 × 51 + 1 × 50
= 25 + 0 + 1 = 2610
Sistema binario
• Caratteristiche
- su n cifre si rappresentano 2n numeri; ad esempio su 4 cifre:
- Prime 16 potenze del 2:
0 ... 0 1000 ... 8
1 ... 1 1001 ... 9
10 ... 2 1010 ... 10
11 ... 3 1011 ... 11
100 ... 4 1100 ... 12
101 ... 5 1101 ... 13
110 ... 6 1110 ... 14
111 ... 7 1111 ... 15
20 ... 1 29 ... 512
21 ... 2 210 ... 1024
22 ... 4 211 ... 2048
23 ... 8 212 ... 4096
24 ... 16 213 ... 8192
25 ... 32 214 ... 16384
26 ... 64 215 ... 32768 27 ... 128 216 ... 65536
Sistema binario
• La cifra binaria è detta bit
parola che deriva dall’unione di due elisioni:
binary digit
• I bit estremi di un numero binario si chiamano:
1 0 1 1 1 0 0 1 0 0
MSB
(Most Significant Bit)
LSB
Limiti del sistema binario
• Poiché su
n
bit si rappresentano 2n numeri, perrappresentare la stessa grandezza occorrono molte più cifre rispetto al sistema numerico decimale.
bit simboli val. minimo val. massimo
4 16 0 15
8 256 0 255
16 65,536 0 65,535
32 4,294,967,296 0 4,294,967,295
Conversione da binario a decimale
• Si applica direttamente la definizione effettuando la somma pesata delle cifre binarie:
1012 = 1 × 22 + 0 × 21 + 1 × 20
= 4 + 0 + 1
= 5
1101.12 = 1 ⋅ 23 + 1 ⋅ 22 + 0 ⋅ 21 + 1 ⋅ 20 + 1 ⋅ 2-1
= 8 + 4 + 0 + 1 + 0.5
= 13.510
Conversione da binario a decimale (2)
B) Metodo consigliato: da
0 1
2 2 2
2 1
1
...
)
( N d r d r d r d r d
V =
n− n−+
n− n−+ + +
0 1
2 3
2 1
0 1
2 3
2 2
1
0 1
2 2 2
2 1
1
) )
....
) )
(...(
. ...
) ...
(
...
) (
d r
d r
d r
d r
d r
d
d r
d r
d r
d r
d
d r
d r
d r
d r
d N
V
n n
n
n n
n n
n n
n n
+ +
+ +
+
=
=
=
= +
+ +
+ +
=
= +
+ +
+ +
=
−
−
−
− −
− −
− −
− −
mettendo in evidenza i fattori comuni, si ricava:
Conversione da binario a decimale (3)
Si deduce il seguente algoritmo:
1. Si parte dalla cifra più significativa 2. Si moltiplica per la base
3. Si somma la cifra successiva
4. Si ripete da 2. fino ad arrivare a d0
Esempio: 10102 = ((1*2+0)*2+1)*2+0 = 1010
Conversione da decimale a binario
N = dn-1· rn-1 + ... + d0· r0 + d-1· r-1 + ... + d-m· r-m
• Consideriamo la sola parte intera e riscriviamo il numero binario nel modo seguente:
N = d0 + 2 · (d1 + 2 · (d2 + ... + dn-1))
• Si può osservare che dividendo N per la base 2, si ottiene un
quoziente (d1 + r · (d2 + ... + dn-1)) e un resto d0, che costituisce proprio la cifra meno significativa del numero nella base 2.
• Dividendo successivamente il quoziente per la base 2 si trova ancora un quoziente e un resto d1, che è la cifra di peso uno cercata, e così via.
Esempio
• Esempio:
13 6 3 1 0 quozienti
1 0 1 1 resti
d0 d1 d2 d3
1310 = 11012
Numero di bit della
rappresentazione binaria
Problema: dato N10, quanti bit (n) occorrono per rappresentarlo in base 2 ?
Con n bit il massimo numero rappresentabile è:
1 2
2
1
0
max =
∑
− = −=
n n
i
N i
Con n-1 bit il massimo numero rappresentabile è:
1 2
2 1
2
0 '
max = − = − −
∑
n= n iN i
Numero di bit della
rappresentazione binaria (2)
Pertanto per rappresentare un numero x tale che x ≤ 2n-1 e x > 2n-1-1 occorrono n bit.
Esempio: 3=22-1 < 5 < 7=23-1: 5 si rappresenta su 3 bit (infatti 510 = 1012).
Ora:
2n-1-1 < x ≤ 2n-1 2n-1 < x+1 ≤ 2n n-1 < log2(x+1) ≤ n
Numero di bit della
rappresentazione binaria (3)
n = ⎡log2 (x+1)⎤
⎡k⎤ = intero superiore o uguale a k In generale, per una base r:
n = ⎡logr (x+1)⎤
Numero di bit della
rappresentazione binaria (4)
Dato N, il rapporto tra cifre decimali e bit occorrenti per rappresentarlo:
D / B = ⎡log10(N+1)⎤ / ⎡log2(N+1)⎤
non è costante al variare di N.
Si può però osservare che:
210 = 1024 ≅ 1000 = 103 → 10 bit ogni 3 cifre decimali.
Questo rapporto si mantiene per un largo intervallo di valori.
Numero di bit della
rappresentazione binaria (5)
210 = 1024 ≅ 103 → Kilo
220 = 1.048.576 ≅ 106 → Mega 230 = 1.073.741.824 ≅ 109 → Giga
Conversione da decimale a binario
• Dato un numero frazionario:
N = a-1 2-1 + a-2 2-2 + ... + a-m 2-m
• moltiplicando N per la base 2, si ricava come parte intera la cifra a-1, cioè la prima cifra binaria.
• Eliminata questa parte intera, moltiplicando quanto resta ancora per 2, si ricava come parte intera a-2, ecc.
• Le parti intere, scritte nel medesimo ordine con cui sono state ricavate, rappresentano il numero frazionario
binario cercato.
Esempio
• Regola: si moltiplica per due la parte frazionaria e si
prende la cifra intera prodotta dal risultato proseguendo fino alla precisione richiesta.
- Esempio: 0.34 x 2
0.68 x 0.3410 = 0.01012
2 1.36 x
2 0.72 x
2
1.44 ecc. 13.3410 = 1101.01012
Per convertire un numero con parte intera e parte
frazionaria, si convertono separatamente le due parti e poi si giustappongono.
Esempio: 25.812510 = (?)2
2510 = 110012 (metodo delle divisioni successive) 0.812510 = 0.11012 (metodo dei prodotti successivi) 25.812510 = (11001.1101)2
Conversioni tra sistemi in base qualsiasi
• E’ ovvio che le regole di conversione decimale-binario
sono del tutto generali e valgono qualsiasi siano i sistemi numerici coinvolti.
• Ad esempio per convertire il numero decimale 365 in base 7 si divide per 7:
365 52 7 1 0 1 3 0 1
36510 = 10317
Operazioni aritmetiche
• Le operazioni aritmetiche in un qualsiasi sistema
numerico si possono eseguire nello stesso identico modo che conosciamo così bene per il sistema numerico
decimale.
• L’avvertenza è solo quella di costruire la “tabellina”
opportuna per quel particolare sistema numerico: si
ricordi che la tabellina per il sistema numerico decimale ce la siamo studiata a memoria sin dall’infanzia!!!!
• Il nostro interesse è però particolarmente concentrato sul sistema numerico binario e sono proprio le operazioni
aritmetiche in binario che affronteremo ora.
Somma in binario
• Regole base:
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0 con riporto (carry) di 1
• Si effettuano le somme parziali tra i bit dello stesso peso, propagando gli eventuali riporti:
1 1
0 1 1 0 + 6 + 0 1 1 1 = 7 = 1 1 0 1 13
Somma completa
• La somma completa (full addition) tiene conto del riporto per cui si sommano due bit ed un carry ottenendo come risultato
un bit di somma
eun bit di riporto
A B Carry S Rip
0 0 0 0 0
0 1 0 1 0
1 0 0 1 0
1 1 0 0 1
0 0 1 1 0
0 1 1 0 1
1 0 1 0 1
1 1 1 1 1
Sottrazione in binario
• Regole base:
0 – 0 = 0
0 – 1 = 1 con prestito (borrow) di 1 1 – 0 = 1
1 – 1 = 0
• Si eseguono le sottrazioni bit a bit tenendo conto dei prestiti:
1
1 1 0 0 - 12 -
1 0 1 0 = 10 = 0 0 1 0 2
Sottrazione completa
• Analogamente alla somma, è possibile definire la sottrazione completa (sottrazione tra due bit ed un borrow )
A B Borrow S Prest
0 0 0 0 0
0 1 0 1 1
1 0 0 1 0
1 1 0 0 0
0 0 1 1 1
0 1 1 0 1
1 0 1 0 0
1 1 1 1 1
Moltiplicazione in binario
• Il prodotto tra due numeri binari si può calcolare con la tecnica già nota per i numeri in base 10, detta della
somma e scorrimento
.- Esempio:
1 0 1 1 x 11 x 1 0 1 = 5 = 1 0 1 1 55 0 0 0 0
1 0 1 1
1 1 0 1 1 1
• Nella pratica si usano accorgimenti particolari basati sull’operazione di scorrimento (
shift
).Divisione in binario
• Come per le altre operazioni applichiamo le stesse regole che usiamo col sistema decimale:
- Esempio:
1 0 1 0 1 1 1
0 0 0 1 1 1 21 / 3 = 7 1 0 1
0 1 1 1 0 0
1 1 0 0 1 1
1 1 0 0
L’operazione di shift
• Equivale ad una moltiplicazione o divisione per la base.
• Consiste nel “
far scorrere
” i bit (a sinistra o a destra) inserendo opportuni valori nei posti lasciati liberi.• In decimale equivale a moltiplicare (shift a sinistra) o dividere (shift a destra) per 10.
• In binario equivale a moltiplicare (shift a sinistra) o dividere (shift a destra) per 2.
Shift a sinistra
• Si inserisce come LSB un bit a zero
• Equivale ad una moltiplicazione per due 0011 « 1 = 0110 ( 3 × 2 = 6 )
0011 « 2 = 1100 ( 3 × 22 = 12 ) 0011 « 3 = 11000 ( 3 × 23 = 24 )
0 0 1 1
0 1 1 0
« 1 (shift a sinistra di 1 posizione)
0
Shift a destra
• Si inserisce come MSB un bit a zero
• Equivale ad una divisione per due
0110 » 1 = 0011 ( 6 : 2 = 3 )
0110 » 2 = 0001 ( 6 : 4 = 1 ) troncamento!
0 1 1 0
0 1 1 0
»
1 (shift a destra di 1 posizione) 0Moltiplicazioni
• Una qualsiasi moltiplicazione tra due numeri può essere trasformata in una serie di shift e di somme, operazioni che vengono eseguite molto velocemente dai
microprocessori.
• Ad esempio il prodotto 14 x 13 diventa:
14 · 13 = 14 · (8 + 4 + 1) = 14 · 8 + 14 · 4 + 14 · 1
1410 = 11102 1 1 1 1
1110000 + 1110 « 3 + 1110 « 2 + 1110 111000 + 1110 = 10110110
Limiti della rappresentazione
• Quando scriviamo sulla carta non ci preoccupiamo quasi mai della grandezza dei numeri (a meno di particolari necessità).
• Nelle macchine numeriche un numero deve essere rappresentato in un particolare dispositivo elettronico interno che si chiama registro ed è paragonabile ad una cella di memoria.
• Caratteristica fondamentale di questo dispositivo è la sua dimensione (numero di bit) stabilita in sede di progetto:
ovvero in un elaboratore potremo rappresentare solo una quantità limitata di numeri.
Limiti della rappresentazione
• Ad esempio se il nostro contenitore (registro) è lungo 5 bit:
potremo rappresentare solamente i numeri binari compresi tra 0
0 0 0 0 0 e 31
1 1 1 1 1
• Inoltre dovremo in qualche modo introdurre il segno dei numeri!
I numeri con segno
• Oltre al problema relativo al valore del numero bisogna trovare il modo di rappresentare il segno.
• Il segno dei numeri può essere solo di due tipi:
positivo ( + ) negativo ( - )
• Sembrerebbe quindi facile rappresentarlo in binario, tuttavia la soluzione più semplice (1 bit riservato al segno) non è sempre conveniente.
• Per tener conto del segno anziché il sistema numerico binario si utilizzano dei
codici binari
che hanno tuttavia come base, ovviamente, il sistema numerico binario.Modulo e segno
• Su N bit, un bit è destinato al segno (in binario 0 = +, 1 = -) e N-1 bit al valore assoluto (anche detto
modulo
)S modulo
• E’ un codice che ricorda molto il nostro modo di rappresentare i numeri sulla carta.
• Presenta però gravi svantaggi dovuti alla doppia
rappresentazione dello zero (esistono e sono leciti infatti sia + 0, che - 0) e alla complessità delle operazioni
aritmetiche.
Modulo e segno
• Esempi - usando una codifica su quattro bit:
+ 310 → 0011MS
− 310 → 1011MS
• Si ha una doppia rappresentazione dello zero:
0000MS → + 010 1000MS → − 010
• In generale su N bit sono rappresentabili i valori:
- ( 2N-1 - 1 ) ≤
x
≤ + ( 2N-1 - 1 )8 bit => [ -127 ÷ +127 ]
16 bit => [ -32.767 ÷ +32.767 ]
Complemento a 1
• Considerando numeri binari di
n
bit, si definiscecomplemento a uno
di un numero A la quantità:A = 2n - 1 – A
• Viene anche detto semplicemente complemento.
• Regola pratica:
il complemento a uno di un numero binario A si ottiene cambiando il valore di tutti i suoi bit (complementando ogni bit)
- Esempio:
A = 1011 → A = 0100
Complemento a 2
• Considerando numeri binari di
n
bit, si definiscecomplemento a due
di un numero A la quantità:A = 2n – A Regola pratica:
il complemento a due di un numero binario A si ottiene sommando uno al suo complemento (a uno)
- Esempio:
A = 1011 → A = 0100 → A = 0101
Complemento a 2
• E’ usato per rappresentare numeri relativi:
( A ≥ 0 ) 0 A2 (= AMS)
( A < 0 ) complemento a 2 di A
• In questo modo l’MSB indica il segno: 0 = +, 1 = -
• Regola alternativa per la determimazione del complemento a due:
si parte da destra, si lasciano inalterati tutti gli zeri fino al primo uno che si lascia inalterato, si complementano tutti gli altri bit
• Esempio:
A = 001101001000; A = 110010111000
Complemento a 2
• Esempio - usando una codifica su 4 bit:
+ 310 → 0 ( 32 ) → 0011CA2
- 310 → - 0011 → 1100 + 1 → 1101CA2
• In generale su N bit sono rappresentabili i valori:
- ( 2N-1 ) ≤
x
≤ + ( 2N-1 - 1 )8 bit => [ -128 ÷ +127 ]
16 bit => [ -32.768 ÷ +32.767 ]
Somma e sottrazione in complemento a 2
• La somma si effettua direttamente, senza badare ai segni degli operandi, come fossero due normali numeri binari.
• La sottrazione si effettua sommando al minuendo il complemento a 2 del sottraendo:
A – B → A + (- B) ovvero: A + B
• Esempio:
0 1 0 1 0 + 10 + 1 0 1 0 0 = - 12 = 1 1 1 1 0 - 2
Overflow
• Si usa il termine
overflow
per indicare l’errore che si verifica in un sistema di calcolo automaticoquando il risultato di un’operazione non è rappresentabile con la medesima codifica e numero di bit degli operandi.
• Nella somma in binario puro si ha overflow quando si opera con un numero fisso di bit e si genera un riporto (carry) sul bit più significativo (MSB, quello più a sinistra).
Esempio: somma tra numeri di 4 bit in
binario puro
0 1 0 1 +1 1 1 0 = overflow! → 1 0 0 1 1
Overflow in complemento a 2
1. Operandi con segno discorde:
- non si può mai verificare overflow!!!!!
2. Operandi con segno concorde:
- c’è overflow quando il risultato ha segno discorde da quello dei due operandi
3. In ogni caso, si trascura sempre il carry (riporto) oltre il MSB
Esempi:
0 1 0 1 + 1 1 1 0 +
0 1 0 0 = 1 1 0 1 =
1 0 0 1 1 1 0 1 1 =
carry, risultato OK
Fixed-point
• Si usa un numero fisso di bit per la parte intera e per quella frazionaria (e non si rappresenta la virgola!)
• Ad esempio (4 + 4 bit, binario puro):
15.9375 = 11111111 0.0625 = 00000001
virgola sottintesa
Fixed-point
• Vantaggi:
- gli operandi sono allineati per cui le operazioni aritmetiche risultano facili ed immediate;
- la precisione assoluta è fissa
• Svantaggi:
- l’intervallo di valori rappresentati è assai modesto
- la precisione dei numeri frazionari rappresentati molto scarsa
• Utilizzo tipico:
- DSP (Digital Signal Processor)
- Sistemi digitali per applicazioni specifiche (special-purpose) - Numeri interi nei calcolatori
Rappresentazione di numeri interi
• A causa dell’estrema semplicità che presentano le
operazioni aritmetiche in complemento a 2, in tutte le
macchine numeriche i numeri interi vengono rappresentati in questo codice.
• Il numero di bit utilizzati dipende dalla macchina: si tratta generalmente di 16 bit (
interi corti
) o 32 bit (interi lunghi
).• La rappresentazione è nota col nome di fixed-point e il punto frazionario è supposto all’estrema destra della sequenza di bit (parte frazionaria nulla).
Rappresentazione di numeri reali
• Le rappresentazioni fin qui considerate hanno il pregio di rappresentare esattamente i numeri (almeno quelli interi) ma richiedono un numero di bit esorbitante quando il
numero da rappresentare ha valore elevato.
• La rappresentazione dei numeri frazionari che deriva dai codici precedenti, ovvero in fixed point, a causa delle forti approssimazioni che impone è usata raramente.
• Generalmente viene utilizzato un apposito codice noto come floating point che consente di rappresentare in un numero limitato di bit grandezze di qualsiasi valore anche se condizionate da approssimazioni più o meno elevate.
Rappresentazione di numeri in floating point
Realizza un compromesso tra l'intervallo dei valori rappresentati e la precisione della rappresentazione.
Utilizza una notazione del tipo mantissa + esponente dove il numero di bit dedicati
• alla mantissa influisce sulla precisione
• all' esponente influisce sull' ampiezza
dell'inter-vallo di valori rappresentabili
La notazione scientifica
• Numeri in virgola fissa su 6 cifre decimali. Intervallo esprimibile:
0 ÷ 999999 (≅ 10
6)
• Numeri in notazione scientifica su 6 cifre. Forma:
X.YYY⋅10
WW• Dove la parte intera X esprime la quantità, il numero di cifre della parte frazionaria YYY la precisione,
l’esponente WW l’ordine di
grandezza.
La notazione scientifica (2)
• Intervallo di valori espressi:
0 (0.000⋅10
0) ÷ 10
100(9.999⋅10
99)
• Con 6 cifre, si rappresentano sempre 10
6numeri differenti, ma
– Nella rappresentazione in virgola fissa, sono equispaziati
– Nella rappresentazione in virgola mobile, non sono distribuiti uniformemente: vicino allo zero, i numeri differiscono di 10-3; vicino al valore massimo, differiscono di 10-3⋅1099= 1096.
Standard IEEE P754
Definisce i formati per la rappresentazione dei numeri in virgola mobile ma anche:
• le conversioni tra formati floating point differenti;
• le conversioni tra numeri f. p. ed interi o numeri rappresentati in codice BCD;
• i risultati delle operazioni aritmetiche;
• i metodi di trattamento di situazioni di
eccezione (es. divisione per zero, errori di
overflow, under-flow etc.).
Single basic format P754 (32 bit)
I numeri sono pensati nella forma normalizzata:
X = (-1) s (1.m)2 e dove:
• s è il bit di segno;
• e è l'esponente rappresentato in codice
eccesso 127 (cioè esponente vero + 127)
su 8 bit ( -126 ≤ e ≤ 127);
Single basic format P754 (32 bit)
• m è la mantissa rappresentata in forma normalizzata su 23 bit in modo che il primo bit abbia peso 2
-1;(il bit 2
0sempre uguale a 1 non viene rappresentato ed è detto hidden bit)
Esempio:
13.25
10va trasformato nella forma normalizzata:
+1101.01
2= +1.10101
2⋅2
3Struttura della
rappresentazione single basic format
s e m
11.75
10= 1011.11
2= 1.01111*2
3⇒ s = 0 e = 10000010 m = 01111....
Esempio: rappresentare 11.75
10in P754 s.b.f.
0 10000010 01111000000000000000000
Caratteristiche della
rappresentazione P754 su 32
Range della rappresentazione: si bit
considerano i valori assoluti dei numeri normalizzati rappresentabili:
N
max= 1.111... ·2
127= 3.4 · 10
38N
min= 1.000... ·2
-126= 1.17 · 10
-38Precisione della rappresentazione: due valori rappresentabili e consecutivi differiscono per 2
e-23dove “e” è
l’esponente vero (non in codice eccesso
127)
Distribuzione dei numeri in f.p.
1 2 4 8
-1 -2
- 4 - 8
1.0..*
20
1.0..*
21
1.0..*
22
1.0..*
23
223 numeri 223 numeri
Interpretazione di un numero f.p.
Sia s il bit del segno, e l’esponente, f la parte frazionaria.
• Se e = 0 ed f = 0, il valore è (-1)
s⋅0, cioè +0 oppure -0
• Se e = 0 ed f ≠ 0, è una forma
denormalizzata (esempio: si
possono rappresentare gli interi su
Interpretazione di un numero f.p. (2)
• Se 0 < e < 255, è una forma normalizzata e il valore è
(-1)
s⋅(1.f)⋅2
(e-127)• Se e = 255 ed f ≠ 0, si rappresenta (-1)
s(∞)
cioè un numero infinitamente
grande o infinitamente piccolo
Interpretazione di un numero f.p. (3)
• Se e = 255 ed f = 0, non si tratta di un numero valido (not a number,
NAN): permette di codificare condizioni particolari, quali operazione non valida, overflow,
ecc.
Operazioni in f.p.
Gli operandi sono da riportare nella forma:
±1.xxxxx…x⋅2
a±1.yyyyy…y⋅2
bdove a e b sono gli esponenti eccesso 127
SOMMA – SOTTRAZIONE
Si eseguono le operazioni con gli
algoritmi del modulo e segno.
Operazioni in f.p. (2)
Si devono allineare i numeri rispetto al punto decimale, riportandoli allo stesso esponente. Si fa scorrere a destra il valore minore (in modulo) di un numero di posizioni pari alla differenza degli esponenti.
La differenza degli esponenti si può fare direttamente sui valori eccesso 127: (a’+127)-(b’+127) = a’-b’.
L’esponente del risultato è quello
del modulo maggiore.
Operazioni in f.p. (3)
PRODOTTO
Si sommano gli esponenti normalizzati e si sottrae 127:
(a’+127) + (b’+127) = (a’+b’+127)+127.
Si moltiplicano le mantisse di 24 bit, ottenendo il prodotto su 48 bit: il risultato deve essere troncato ai 24 bit più significativi (precisione di 2
-23
).
Può essere richiesta una ri-
normalizzazione: 1.x… ⋅ 1.y… < 100
2Operazioni in f.p. (4)
DIVISIONE
Si sottraggono gli esponenti normalizzati e si somma 127:
(a’+127) - (b’+127) = (a’-b’).
Il dividendo, di 24 bit, si estende a 48 bit, inserendo zeri a destra, e si divide per il divisore, di 24 bit: il risultato, di 24 bit, ha la precisione di 2
-23.
Può essere richiesta una ri-
normalizzazione.
Osservazioni sul f.p.
I risultati delle operazioni in f.p.
possono dipendere dall’ordine di esecuzione.
Esempio
10
16+ 2 - 10
16e
10
16- 10
16+ 2
danno risultati diversi.
Osservazioni sul f.p. (2)
In generale, in f.p. vale a + b = a se
a / b > 2
24≅ 16⋅10
6Esempio:
non ha senso incrementare di uno un valore positivo a se a è molto maggiore di 1.
6
24 16 10
2 ≅ ⋅ b〉
a 24 6
10 16 2 ≅ ⋅ b〉
a 24 6
10 16 2 ≅ ⋅ b〉
a 24 6
10 16 2 ≅ ⋅ b〉
a 24 6
10 16 2 ≅ ⋅ b〉
a 24 6
10 16 2 ≅ ⋅ b〉
a 24 6
10 16 2 ≅ ⋅ b〉
a 24 6
10 16 2 ≅ ⋅ b〉
a 24 6
10 16 2 ≅ ⋅ b〉
a 24 6
10 16 2 ≅ ⋅ b〉
a 24 6
10 16 2 ≅ ⋅ b〉
a 24 6
10 16 2 ≅ ⋅ b〉
a
Floating-point
• E’ basata sul formato esponenziale (
notazione scientifica
) N = mantissa ⋅ base esponente- Ricorda le notazioni:
standard 3.5 × 104 3.5E+4 scientifico 0.35 × 105 0.35E+5
• Nei sistemi di elaborazione
- Base = 2
- Mantissa ed esponente sono rappresentati in binario
Floating-point
• Vantaggi:
- grande intervallo di valori rappresentabili - errore relativo fisso
• Svantaggi:
- operandi non allineati per cui le operazioni aritmetiche risultano molto complesse
- errore assoluto variabile e dipendente dal valore del numero
• E’ la rappresentazione utilizzata da tutti i calcolatori
elettronici per rappresentare i numeri frazionari ed è stata standardizzata dall’IEEE.
Formato IEEE-P754
• Standard IEEE per il floating-point:
- Rappresentazione binaria di mantissa
esponente segno
• Singola precisione: 32 bit (float)
• Doppia precisione: 64 bit (double)
23 bit 8 bit
esponente
segno mantissa
1 bit
52 bit 11 bit
esponente
segno mantissa
1 bit
precisione: circa 7 cifre decimali
precisione: circa 17 cifre decimali
Overflow e Underflow
• A causa della precisione variabile è possibile avere errori di rappresentazione:
- numeri troppo grandi: overflow - numeri troppo piccoli: underflow
Esempio: IEEE P754
-1038 -10-38 0 10-38 1038
overflow
underflow
Rappresentazioni di dati non numerici
• Qualunque insieme finito di oggetti può essere
codificato
tramite valori numerici associando ad ogni oggetto uncodice
(ad esempio un numero intero).• Nel sistema numerico binario per rappresentare K oggetti distinti occorre un numero minimo di bit pari a:
N = ⎡ log2 K ⎤
Caratteri
• E’ sicuramente il tipo di informazione più scambiata:
occorre pertanto una codifica standard.
- la più usata fa riferimento al codice ASCII (American Standard Code for Information Interchange)
- in passato era molto diffuso il codice EBCDIC (Extended BCD Interchange Code)
- codice UNICODE
Codice ASCII
• E’ usato anche nelle telecomunicazioni.
• Usa 8 bit per rappresentare:
- i 52 caratteri alfabetici (a ÷ z , A ÷ Z) - le 10 cifre (0 ÷ 9)
- i segni di interpunzione (,;:!?&%=+-/ ecc.) - un gruppo di caratteri di controllo tra cui:
CR ( 13 ) Carriage Return
LF,NL ( 10 ) New Line, Line Feed FF,NP ( 12 ) New Page, Form Feed HT ( 9 ) Horizontal Tab
VT ( 11 ) Vertical Tab NUL ( 0 ) Null
BEL ( 7 ) Bell
EOT ( 4 ) End-Of-Transmission
Codice ASCII
• Ad esempio per rappresentare il messaggio “Auguri a tutti!” è necessaria la seguente sequenza:
01000001 A 00100000 spazio
01110101 u 01110100 t
01100111 g 01110101 u
01110101 u 01110100 t
01110010 r 01110100 t
01101001 i 01101001 i
00100000 spazio 00100001 ! 01100001 a