Sei sulla pagina 1di 27

RAPPRESENTAZIONE DEI NUMERI

1 Numeri interi
n questa lezione presento la rappresentazione dei numeri. Ci sono molti modi
Isizionale.
per rappresentare i numeri, ma il più interessante è la rappresentazione po-
Cosa si intende?
Prendiamo un esempio ... il numero 38410 . Qual è il significato di questa
rappresentazione? Beh ... semplice:

384 = 3 · 102 + 8 · 101 + 4 · 100

Si esprime un numero, che chiamiamo “trecentottantaquattro”, attraverso 10


simboli, con cui abbiamo familiarità. In sostanza, si dice che si rappresenta il
numero in base 10, semplicemente perchè abbiamo 10 dita. Ora, supponiamo di
cambiare base ... ad esempio si usa la base 3 ... e prendo il numero

2013 = 2 · 32 + 0 · 31 + 1 · 30

Mentre in base 10 uso le cifre {0, 1, 2, . . . , 9}, in base 3 uso {0, 1, 2}. Interes-
sante ... avrei anche potuto decidere che in base tre si usano cifre rappresentate
con i simboli {⊕, ◦, }. In questo caso, invece del “familiare” 201 avrei scritto

 ⊕ ◦.

Chiaramente, tutti i calcoli tipici con i numeri coinvolgerebbero questi nuovi


simboli {⊕, ◦, }. Rappresentazione po-
In generale, se b è la base allora un numero intero x ∈ N si rappresenta sizionale
attraverso
n
X
x= aκ bκ . (1)
i=0

Quindi, è come dire che


x ≡ (an , an−1 . . . , a0 )b ,
dove an , an−1 . . . , a0 sono le cifre che rappresentano x in base b.
Come cambiare base? Ad esempio, chi è  ⊕ ◦ in base 10? Per semplicità di
memorizzazione, usiamo {0, 1, 2} come cifre anche in base 3. Usiamo la definizione
di rappresentazione posizionale; si ha

2013 = 2 · 32 + 0 · 31 + 1 · 30 = 2 · 9 + 1 = 1910 .

La conversione di base non crea alcun problema in questo caso, dato che si
calcola la rappresentazione in base 10 usando appunto l’aritmetica della base
2

10, che permette di rappresentare tutti i numeri dell’espressione posizionale. In


sostanza, le cifre della base 3 sono tutte presenti nella base 10, quindi i calcoli
sono diretti.
Adesso diventa naturale chiedersi ... come faccio a tornare indietro. Si procede
nello stesso modo? Ovvero, è dato il numero (19)10 e voglio conoscere la sua Come si torna
rappresentazione in base 3. Posso fare come prima? Provo ... indietro?

1910 = (?)3

Ci sono cifre (ad esempio il 9) che non sono rappresentabili con una singola
corrispondente cifra in base 3 ! Ecco che non si può usare lo stesso metodo diretto,
semplicemente perchè non si sa come rappresentare le 7 cifre che mancano! Ad
esempio, nel numero 1910 = 1 · 101 + 9 · 100 le cifre 9 e 10 non sono presenti in
base 3. Quindi? Potrei esprimere i numeri 9 e 10 che non sono rappresentabili in
base 3 rispettivamente come

9=2+2+2+2+1
10 = 2 + 2 + 2 + 2 + 2.

Allora si ha:

1910 = 1 · 101 + 9 · 100


= 1 · (2 + 2 + 2 + 2 + 2) + (2 + 2 + 2 + 2 + 1)
| {z } | {z }
10 9
= 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 +1 = 2 · 32 + 0 · 31 + 1 · 30
| {z }
2 ripetuto 9 volte

≡ 2013

L’idea è generale e uno potrebbe applicarla ad conversione da base B a


base b con B > b. Provate con altri esempi e ... in seguito ... pensate ad un
algoritmo per implementare questa idea. Non è cosı̀ semplice. Come minimo
uno potrebbe notare che i numeri 10 e 9, espressi come sopra nella base 3 si
sarebbero potuti esprimere diversamente. Ad esempio avrei potuto prendere 10 =
2 + 2 + 2 + 2 + 1 + 1. In generale la scelta di esprimere come somma le cifre non
rappresentabili richiede attenzione ulteriore ...
Un modo più diretto è di decidere di risolvere il problema di conversione
delle cifre mancanti. In questo caso si deve rappresentare 9 e 10 in base 3. Uno
potrebbe semplicemente contare. In base 3 si ha

0, 1, 2, 10, 11, 12, 20, 21, 22, 100 , 101 .

Quindi di 910 = 1003 e 1010 = 1013 . Allora

1910 = 1 · 1013 + 1003 .


RAPPRESENTAZIONE DEI NUMERI 3

Quindi si può fare la somma:

101 +
100 =
201

e si riottiene lo stesso risultato. Ah ... naturalmente, ho usato la regola che si


usa da sempre anche facendo le somme con la base 10. Ma chi autorizza questo
“algoritmo”? Ritorneremo su questo argomento.
Cerchiamo adesso un metodo migliore ... uno facilmente descrivibile dal punto
di vista algoritmico e anche generale. Ad esempio l’ultimo metodo comunque
richiede una fase preliminare per rappresentare le cifre mancanti nel passaggio
da B a b con B > b. Divisioni successive
Prendiamo questo esempio: chi è 9410 in base 5? Per comprenderlo è conve-
niente procedere con divisioni successive di 94 per 5. Ecco cosa si trova ...

94 = 5 · 18 + 4
18 = 5 · 3 + 3
3 = 5 · 0 +3
|{z}
stop

94 = 5 · (5 · (5 · 0 + 3) +3) +4 = 3 · 52 + 3 · 51 + 4 · 50 .
| {z }
3
| {z }
18

Dunque,
9410 = 3345 .
Chiaramente, l’idea delle divisioni successive funziona per conversione di nu-
meri in qualunque base. Giochiamo ancora con altre basi ... la base b = 2 è molto
interessante perchè possiede il numero minimo di simboli per rappresentare i nu-
meri. Ad esempio il numero 11012 in base 10 diventa

11012 = 1 · 23 + 1 · 22 + 0 · 21 + 1 · 20 = (13)10 .

Adesso prendiamo (13)10 e torniamo alla base 2. Usiamo ancora l’idea delle
divisioni successive

13 = 2 · 6 + 1
6=2·3+0
3=2·1+1
1 = 2 · 0 +1.
|{z}
stop

Dunque,
1310 = 11012 .
4

Siccome queste idee sulla rappresentazione non dipendono dalla base, provi-
amo a vedere come convertire 2013 in base 4. Stessa storia ... la base di arrivo
è più grande di quella di partenza ... allora posso fare direttamente i conti e
calcolare
2013 = 2 · 32 + 0 · 31 + 1 · 30 .
Dobbiamo calcolare 32 . Come si fa? Non dimentichiamo che serve fare i conti
in base 4. Aiuta vedere come si conta in base 4. Ovviamente in questo modo ...

3 , 10, 11, |{z}


0, 1, 2, |{z} 12 , 13, 20, 21 , 22, 23, 30, 31, 32, 33, 100, . . .
|{z}
31 3+3 3+3+3
| {z }
32

... quindi 32 = 21. Come conseguenza

2013 = 2 · (21) + 0 · 31 + 1 · 30 . (2)

Dobbiamo calcolare un prodotto 2 · (21). Come si fa?

21 · 2
102

Esattamente come in base 10 ... Infatti si usa la proprietà distributiva del


prodotto rispetto alla somma ... cioè

(2 · 41 + 1 · 40 ) · 2 = (2 · 2) · 41 + (1 · 2) · 40
= 4 · 4 + 2 · 40 = 1 · 42 + 0 · 41 + 2 · 40 .

Dalla 2 si conclude che


2013 = 1034 . (3)
Proviamo adesso a tornare indietro. Dato 1034 come si trova la sua rappresen-
tazione in base tre? Possiamo usare le divisioni successive. Lavoriamo in base
quattro. Si ha

103 = 3 · 12 + 1
12 = 3 · 2 + 0
2=3·0+ 2 .

Dunque, (103)4 = (201)3 .


Dobbiamo calcolare 32 . Come si fa?102
Non dimentichiamo che serve fare i conti
in base 4. Aiuta vedere come si conta in base 4. Ovviamente in questo modo ...
Esattamente come in base 10 ... Infatti si usa la proprietà distributiva del
0, 1, 2, |{z}
3 , 10, 11, |{z}
12 , 13, 20, 21 , 22, 23, 30, 31, 32, 33, 100, . . .
prodotto rispetto alla somma ... cioè |{z}
31 3+3 3+3+3
| {z }
(2 · 41 + 1 · 40 ) · 2 = (2 · 2) · 4132+ (1 · 2) · 40
... quindi 32 = 21. Come = 4 · 4 + 2 · 40 = 1 · 42 + 0 · 41 + 2 · 40 .
conseguenza

201 = RAPPRESENTAZIONE
2 · (21) + 0 · 31 + 1 · 30 . DEI NUMERI (2) 5
Dalla ?? si conclude che 3
Dobbiamo calcolare un prodotto 2 3· (21).
201 = 103Come
4.
si fa? (3)
2 Le moltiplicazioni e la
Il precedente calcolo di 3 in base 4
21 · 2
suggerisce un po’ di riflessione per fare
tavola Pitagorica
Chiaramente, come per 32 chi fa moltiplicazioni con quattro dita
quiqui 24 settembre
moltiplicazioni.
102 sotto riassunta Comunque si sceglie una
deve memorizzare la tavola di Pitagora
Esattamente come
Fig.in1: base 10Pitagorica
Tabella ... Infattidella
si usa la proprietàin distributiva
moltiplicazione del
base 4. Gli elementi
? 1 2 rispetto
prodotto 3 alla tabella
somma derivano
... cioè dalla moltiplicazione dei numeri all’incrocio
1 1 2 3 della
riga-colonna. La determinazione del risultato richiede l’applicazione
2 2 10 (212· 41 + 1 · 40 ) · 2 = (2 · 2) · 41 + (1 · 2) · 40
della definizione di moltiplicazione e il conteggio in base 4.
3 3 12 21 0 2 1 0
=4·4+2·4 = 1 ·4 + 0 ·4 + 2 ·4 .
base occorre dotarsi della tavola corrispondente. Adesso, vediamo perchè le basi
Dalla 2 si conclude che
posizionali sono utili. Servono primariamente per costruire algoritmi efficienti per
2013 = 1034 . (3)
somma, moltiplicazione e corrispondenti operazioni inverse. Cominciamo con la
somma.
Esempio
? 1 2 1.3 DatiFig.
x=1: (221)
Tabella Pitagorica della moltiplicazione in base quattro. Gli
3 , y = (122)3 determinare z = x + y.
Soluzione Si procede come si è tabella
1 1 2 3 elementi della imparatoderivano dalla
a scuola per moltiplicazione
la base 10. dei numeri
2 2 10 12 all’incrocio riga-colonna. La determinazione del risultato richiede
3 3 12 21 l’applicazione della definizione
221+ di moltiplicazione e il conteggio in base
quattro. 122 = (4)
1120

L’algoritmo è motivato proprio dalla rappresentazione scelta. Infatti si ha

(2 · 22 + 2 · 21 + 1 · 20 ) + (1 · 22 + 1 · 21 +Fig.
2 · 21:0 )My caption
= (2 + 1) · 22 + (2 + 2) · 21 + (1 + 2) · 20
= (2 + 1) · 22 + (2 + 2 + 1) · 21 + 0 · 20
2 = 1 · 23 + 1 · 22 + 2 · 21 + 0 · 20
Numeri razionali
Esempio 2. Sonocome
Adesso vediamo datisiglirappresentano
operandi x =i numeri
(102)4 erazionali
y = (130) 4.
estendendo la rappre-
Determinare z = x · y espressa da (1).
sentazione posizionale
Soluzione: Si procede utilizzando il classico algoritmo insegnato a scuola che,
Esempio 1. Cominciamo con un esempio familiare in base 10. Prendiamo il nu-
questa volta, fa uso della Tavola di Pitagora del quattro.
mero 0.75 in rappresentazione decimale ... intervengono le potenze negative:

· 10 · 1132
0.75 = 7 102 + 5=· 10 2
.
210
312− (5)
102−
20130

Che cosa motiva un simile algoritmo? Partiamo dal caso un cui x = 102 e y = 2,
che corrisponde alla prima riga. Se si considera la rappresentazione polinomia si
ha

(1 · 42 + 0 · 41 + 2 · 40 ) · 2 =
(1 · 2) · 42 + (0 · 2) · 41 + (2 · 2) · 40
2 · 42 + 1 · 41 + 0 · 40 ≡ 210
6

Chiaramente 210 si trova dall’uso della properietà distributiva del prodotto


rispetto alla somma e lo stesso schema vale per le moltiplicazioni di 102 per
3 e per 1. Ma perchè si usa questo spostamento (shift) a sinistra? Questo è an-
cora motivato dalla proprietà distributiva del prodotto rispetto alla somma e
dall’adozione della forma polinomia. Infatti
(1 · 42 + 0 · 41 + 2 · 40 ) · (1 · 42 + 3 · 41 + 2 · 40 )
(1 · 42 + 0 · 41 + 2 · 40 ) · 2 · 40 +
(1 · 42 + 0 · 41 + 2 · 40 ) · 3 · 41 +
(1 · 42 + 0 · 41 + 2 · 40 ) · 1 · 42 =
(1 · 42 + 0 · 41 + 2 · 40 ) · 2+
(1 · 43 + 0 · 42 + 2 · 41 ) · 3+
(1 · 44 + 0 · 43 + 2 · 42 ) · 1.
Le ultime tre righe indicano che per ottenere il risultato occorre sommare dopo
aver spostato di una e due posizioni rispettivamente la penultima e l’ultima riga.

2 Numeri razionali

Adesso vediamo come si rappresentano i numeri razionali estendendo la rap-


presentazione posizionale espressa da (1).
Esempio 3. Cominciamo con un esempio familiare in base 10. Prendiamo il nu-
mero 0.75 in rappresentazione decimale ... intervengono le potenze negative:
0.75 = 7 · 10−1 + 5 · 10−2 .
Si capisce subito che la naturale estensione di (1) è
n
X
x= aκ b−κ . (6)
i=1

Adesso prendiamo un numero in base 2 ... x = (0.11)2 . Come convertirlo in base


10? Quando si fanno i conti da una base piccola ad una grande si può procedere
in modo diretto:
0.112 ≡ 1 · 2−1 + 1 · 2−2 = 0.7510 .
Esempio 4. Prendiamo un altro esempio: x = 0.10112 . Qual è la sua rapp-
resentazione decimale? Come sopra, si ha
0.10112 ≡ 1 · 2−1 + 0 · 2−2 + 1 · 2−3 + 1 · 2−4
= 0.5 + 0.125 + 0.0625 = 0.6875.
Adesso vediamo con tornare indietro. Se ho il numero x = 0.6875 come faccio a
trovare la sua rappresentazione in base 2? Si tratta di risolvere l’equazione

X
0.6875 = aκ 2−κ . (7)
κ=1
RAPPRESENTAZIONE DEI NUMERI 7

Un primo avvertimento è d’obbligo. Devo trovare a1 , a2 , . . . , aκ . . . e non so nem-


meno se questa rappresentazione è finita! Per trovare i coefficienti si può pro-
cedere con un’idea semplice. Moltiplichiamo ambo i membri per 2. Si ha


X
2 · 0.6875 = 1 .3750 = a1 + aκ 21−κ . (8)
κ=2

Adesso si ha

X ∞
X
aκ 21−κ ≤ 2−κ = 1.
κ=2 κ=1

Quindi, da (8) si vede subito che a1 deve necessariamente essere 1. Se fosse 0


chiaramente si cadrebbe in contraddizione, perchè il numero 1 .3750 risulterebbe
più piccolo di 1. Questo è il motivo per cui 1 è boxed in 1 .3750. Come trovare
adesso i coefficienti rimanenti? Dalla (8), sapendo che a1 = 1 si ottiene


X ∞
X
0 .3750 = aκ 21−κ = αh 2−h , (9)
κ=2 h=1

dove si è posto h = κ − 1 e aκ−1 = αh . Questa espressione è la stessa descritta


da (7). Allora, per trovare a2 si può, ancora moltiplicare per 2. Si ha


X ∞
X
0 .75 = 2 · 0 .3750 = 2αh 2−h = α1 + αh 21−h . (10)
h=1 h=2

Siccome αh ≥ 0 si ha

X
αh 21−h ≥ 0
h=2

e, quindi, necessariamente α1 = 0. Da κ = 1 + h e aκ−1 = αh si ottiene a2 = 0.


Chiaramente questa analisi si può ripetere per ogni cifra. Dunque si può costruire
un algoritmo per trovare le cifre semplicemente attraverso una moltiplicazione
successiva per la base di arrivo. Come vedremo nei prossimi esempi la generazione
delle cifre può generare sia una rappresentazione finita che una rappresentazione
infinita. Moltiplicazioni succes-
sive
Adesso è chiaro che questo procedimento si può reiterare e usare quello
che è noto come algoritmo delle moltiplicazioni successive. Del resto, la
presenza del “loop” era chiara già appena determinato a1 . Vediamo schematica-
8

mente come si procede per determinare tutti i coefficienti ...

0.6875 · 2
1 .3750
0.3750 · 2
0 .75
0.75 · 2
1 .5
0.5 · 2
1 .0.

Quindi, 0.687510 = 0.10112 .

Esempio 5. Prendiamo adesso x = (0.7)10 . Con il metodo delle moltiplicazioni


successive si ottiene

0.7 · 2
1 .4
0.4 · 2
0 .8
0.8 · 2
1 .6
0.6 · 2
1 ·2
0.2 · 2
0 .4.

Dunque adesso abbiamo trovato un ciclo e pertanto si ha

(0.7)10 = 0.10110.

Numeri finiti Adesso torniamo indietro alla base 10. Prendiamo il numero periodico 0.10110
in una base diventano e vediamo chi è in base 10. Dato che la conversione è verso una base più grossa
periodici in un’altra. si possono semplicemente fare i conti in modo diretto nella base di arrivo (base
10). Si ha

0.10110 = 0.1 + 0.00110 (11)


RAPPRESENTAZIONE DEI NUMERI 9

Quindi calcoliamo 0.00110

0.00110 ≡ 0.2−1 + 0 · 2−2 + 1 · 2−3 + 1 · 2−4 + 0 · 2−5 + . . .


| {z }
p
−2 −3 −4
= (0 · 2 +1·2 +1·2 + 0 · 2−5 )
| {z }
p

+ (0 · 2−2 + 1 · 2−3 + 1 · 2−4 + 0 · 2−5 ) 2−4 + . . .


| {z } (12)
p

= p + p · 2−4 + p · 2−8 + ·
= p(1 + 2−4 + 2−8 + . . .)
p
= ,
1−q
1
dove q = 16 è la ragione della progressione geometrica. Siccome

1 1 3
p= + =
8 16 16
Si ha
3 1 1
0.00110 ≡ 1 = 5.
16 1 − 16

Quindi, considerando (11) si conferma che 0.10110 = 0.5 + 0.2 = 0.7.

Il numero x = 0.7 in base 10 ha rappresentazione finita, ma se si cambia base


... ad esempio si va b = 2 si ha una sorpresa! La rappresentazione del numero
richiede infinite cifre. Dunque:

Ci sono numeri decimali che normalmente si esprimiamo con un numero


finito di cifre che non sono rappresentabili nei computer che usano la
base due.
Quando si trovano
C’è un motivo per cui 0.7510 ha rappresentazione finita in base 2 mentre 0.710 rappresentazioni
richiede una rappresentazione infinita? Cosa distingue i due numeri? Vediamoli periodiche?
come frazioni:
75 3
0.75 = =
100 4
7
0.7 = .
10
Una differenza evidente è che 3/4 ha un denominatore 4 = 22 che è una potenza
del 2 - la base di arrivo - mentre lo stesso non vale per 7/10. Quale effetto produce
questa proprietà del denominatore? Per convertire in base due, il metodo delle
moltiplicazioni successive ci dice che dobbiamo successivamente moltiplicare per
due ... l’unico caso in cui tale ripetizione produce l’arresto della rappresentazione
10

è quando si possono cancellare tutti i fattori del denominatore. In altri termini


10 = 5 · 2, mentre 4 = 2 · 2 cosı̀ che
7 7
2· non riducibile
2·5 5
3 3
2· 2· 3 riducibile.
2·2 2
Dunque, 0.7 non è riducibile con moltiplicazioni successive per 2, mentre lo è
0.75. Per guadagnare confidenza, prendiamo un altro esempio, x = 0.4062510 . Si
vede subito che questo ha rappresentazione finita in base 2. Si ha
40625 13 13
x = 0.40625 = = = 5.
100000 32 2
Dunque, con 5 step di moltiplicazioni il numero si riduce e, dunque, la rappre-
sentazione è finita.

3 Rappresentazione dei numeri nei computer


Vediamo adesso come si rappresentano i numeri nei computer.

3.1 Numeri interi


Nei computer si registrano valori alti e bassi che si fanno corrispondere alle
costanti 1, 0 o viceversa. La rappresentazione dei numeri interi è semplice. Ad
ogni numero viene riservato un certo numero di celle di memoria. Un gruppo di
celle assieme si dice parola. Ad esempio, in un computer con parole a 2 bit si
rappresentano i numeri interi

0 0
0 1

1 0
1 1

Ci sono C(n) = 2n pa- Come si vede, i codici a due bit si ottengono replicando la prima colonna ed
role con n bit aggiungendo a sinistra una colonna di due zero e una colonna di due uno. Quindi,
se con 1 bit si rappresentano due codici, con 2 bit se ne rappresenta il doppio.
Si può quindi usare il principio di induzione:
– Passo base: n = 1 si hanno due codici, ovvero C(1) = 21 = 2.
– Passo di induzione: Se con n − 1 bit, invocando l’oracolo di induzione si
hanno C(n − 1) = 2n−1 allora, le codifiche con n bit si possono costruire
duplicando la codifica a n − 1 bit ed aggiungendo a sinistra una colonna
di zero e una colonna di uno - come prima descritto. Dunque, il numero di
codici raddoppia, ovvero:
C(n) = 2 · C(n − 1) = 2 · 2n−1 = 2n
RAPPRESENTAZIONE DEI NUMERI 11

Dunque, con parole ad n bit si rappresentano C(n) = 2n parole

Ad esempio, con 16 bit, classico tipo intero semplice usato nei linguaggi di pro-
grammazione, si rappresentano 216 = 32768 parole. Il range rappresentato è

min = 00 . . . 0 = 010
(13)
max = 11 . . . 1 = (2n − 1)10 .

Perchè max = 11 . . . 1 = (2n − 1)10 ? Un modo per verificarlo è fare direttamente


i calcoli dalla definizione. Usando l’espressione della somma dei termini di una
serie geometrica, che è di ragione 2, si ha:
2n − 1
11 . . . 1 ≡ 2n−1 + 2n−2 + . . . 20 = = 2n − 1.
2−1
Denotiamo con ↑ (x) il successivo di x. Un modo piè elegante per capirlo è

↑ (11 . . . 1}) = 1 00
| {z . . . 0} = 2n
| {z
n bit n bit

. . . 1} = 2n − 1.
. Dunque |11 {z Numeri relativi
n bit
Adesso discutiamo come rappresentare i numeri relativi, dove serve rappre-
sentare il segno. Sembra tutto molto semplice. Uno potrebbe decidere di usare La rappresentazione
la stessa rappresentazione degli interi positivi e utilizzare un bit per il segno. “ovvia” ...
Ad esempio, si potrebbe decidere che − → 1 e + → 0 . Ad esempio, i numeri
decimali +3 e −5 rappresentati su 4 bit sarebbero

+3 0 011
−5 1 101.

Chiaramente questa è una strada possibile, ma in realtà nei computer i numeri


relativi non sono rappresentati in questo modo. Perchè? Iniziamo ad osservare
che questa rappresentazione ha un piccolo difetto: ci sono due rappresentazioni
diverse per il numero 0 ∈ Z. Ovvero, ad esempio sempre nella rappresentazione
a 4 bit precedente lo zero sarebbe rappresentato da entrambi i codici

Z30 0000, 1000

. Questo rende più complesse le operazioni sui numeri. Tutti i circuiti che es-
eguono calcoli devono contemplare questo fatto. Rappresentazione in
Adesso vedremo però che più che questo piccolo difetto ci sono motivi più complemento a due
importanti per scegliere una diversa rappresentazione. Per capirlo studiamo
l’operazione di sottrazione in Z. Chiaramente, tale operazione è fondamentale,
dato che è alla base della generazione dei segni ±. Supponiamo ancora di lavo-
rare con parole di quattro bit e studiamo la sottrazione z = x − y mediante un
esempio. Prendiamo x = 0110 e y = 0011, assumendo che il bit più significativo Un bit è dedicato al
(quello all’estrema sinistra) denoti il segno (+). Corrediamo lo studio anche con segno. Assumo che 0
denoti i positivi.
12

l’interpretazione decimale di questi due numeri che sono rispettivamente x = 610


e y = 310 . Per calcolare il risultato si può pensare di usare l’algoritmo imparato
alla scuola elementare:

0110 −
0011 =
0011

che richiede il calcolo dei prestiti.


C’è un modo molto elegante per aggirare questa richiesta. Si può fare cosı́:

0110 − 0011 = 0110 + (10000 − 10000) − 0011 = 0110 + (1111 − 0011 + 1) − 10000
complemento a 2
4 z }| {
≡ 0110 + 1111 − 0011 +1 = 0110 + (1100 + 1) = 0110 + 1101.
| {z }
complemento a 1
(14)

4
Dunque, operando con la sottrazione su 4 bit si è trovato che 0110 − 0011 ≡
0110 + 1101, ovvero che si può rimpiazzare la sottrazione con un’addizione! In
particolare si ha

0110+
1101 = (15)
1 0011.

In altri termini, se si taglia tutto quello che è fuori della rappresentazione a


4
quattro bit si ha 0110 + 1101 ≡ 0011, che infatti corrisponde al risultato! E’
interessante, perchè in effetti la sottrazione non serve più e basta fare operazioni
di somma. Perchè è però un’operazione legittima quella di troncare sui quattro
bit della rappresentazione ignorando cosa va fuori - in “overflow”? In effetti, se si
4
analizzano i calcoli si vede che l’operazione ≡ è stata invocata in (14) e, ancora,
in (15). In particolare in (14) si è ignorato −10000 mentre in (15) si è ignorato
Che succede con i neg- 10000 che, dunque si cancellano e abilitano il troncamento.
ativi? Adesso vediamo di capire l’effetto di questo ragionamento nel caso in cui si
generano numeri negativi come risultato. Facciamo dunque un altro esempio;
prendiamo x = 0110 e y = 0111. Interpretando in base 10 si vede subito che si
tratta di sottrarre 7 da 6, per cui il risultato è −1. Usiamo di nuovo lo schema
precedente. Si ha

z = x − y = 0110 − 0111
= 0110 + (1111 − 0111 + 1) − 10000 (16)
4
≡ 0110 + 1001.
RAPPRESENTAZIONE DEI NUMERI 13

Adesso sommiamo

0110+
1001 =
1111

Il risultato appare strano ... e il bit di segno adesso è 1. Questo indica che siamo
di fronte ad un risultato negativo. Per capire meglio, non dobbiamo dimenticare
4
che abbiamo usato la relazione ≡ e che, quindi, abbiamo “trascurato” −10000.
Dunque, se vogliamo conoscere il risultato serve calcolare

−10000 + 1111 = −1 − 1111 + 1111 = −1.

Ma questo è semplice. Il segno è negativo, come per altro suggerito dal bit più
significativo della rappresentazione. Il valore assoluto è 1. Complemento a due:
Vediamo di capire meglio. In generale, l’idea illustrata nei due precedenti l’idea più in generale
esempi si può descrivere in questo modo:

x − y = x + (2n − 2n ) − y
= x + (2n − y) − 2n ≡ x + (2n − y)
= x + C2 (y).

Dove si è definito
C2 (y) = 2n − y. (17)
Tale rappresentazione è detta complemento a due di y; useremo la notazione:

C2 (y) = 2n − y = |11 {z
. . . 1} −y + 1. (18)
n bit

Il nome ha genesi semplice: 11 . . . 1} −y è chiaramente il complemento a 1, che


| {z
n bit
corrisponde al “flip” (negazione) dei bit. Il complemento a due richiede la somma
addizionale di 1. Il nome è comunque ereditato dalla base 2 e rappresenta “quanto
manca” a 2n . Chiaramente, quando si considera la sottrazione z = x − y, il caso
più semplice che si può considerare è quello in cui x = 0. Questo ci permette di
attribuire la rappresentazione a −y. Si ha infatti

−y C2 (y). (19)

Dunque, −y si rappresenta come 2n −y. Sappiamo che un bit è riservato al segno


e che i rimanenti n − 1 bit sono riservati al valore del numero. Già sappiamo
dalla (13), che il range di y > 0 su n − 1 bit è l’intervallo [0, 2n−1 − 1]. Dunque

C2 (y) = 2n − y = 2n−1 + (2n−1 − y) ≥ 2n−1 .

Si conclude allora che per numeri positivi C2 (y) ha il bit n-esimo a 1. Ovvero,
quando si rappresenta −y secondo la (19) il bit più significativo - l’n-esimo - è a
14

1. Questo denota dunque che si sta rappresentando un numero negativo. Infine,


si ha che
C2 (C2 (y)) = 2n − (2n − y) = y. (20)
Quindi, poiché dall’Eq. (19) si sa che se y > 0 allora −y si rappresenta mediante
C2 (y). Dunque, complementando ancora C2 (C2 (y)) si trova il corrispondente
valore assoluto y. Possiamo allora riassumere l’analisi con il seguente teorema

Teorema 1. Siano x, y ∈ Z rappresentati con parole di n bit, con un bit dedicato


al segno. Se si sceglie per convenzione che il bit più significativo codifichi il segno
e che il segno positivo sia codificato con lo zero, allora si hanno i seguenti fatti:
i La sottrazione si trasforma in somma:

z = x − y ≡ x + C2 (y) (21)

ii Se z > 0 allora si rappresenta mediante

0 , zn−2 , . . . z0 .

Il range risulta l’intervallo [0, 2n−1 − 1]


iii z = 0 è rappresentato da
0 ,0...0 .
| {z }
n bit

iv Se z < 0 allora si rappresenta mediante

1 , zn−2 , . . . z0 .

Inoltre il suo valore assoluto si determina mediante

|z| = C2 (z). (22)

3.2 Numeri reali


Come si rappresentano i numeri reali nei computer? Sono generalmente rappre-
sentabili in modo approssimato; in sostanza ci sono solo eccezioni che producono
L’esatezza dei numeri rappresentazione esatta. In realtà la rappresentazione esatta dei numeri reali
reali e della scienza: non ha senso, per il significato stesso di numeri reali. In natura i numeri reali
un ossimoro! rappresentano solo un’astrazione. Le grandezze del mondo che ci circonda sono
solo misurabili con margini di incertezza. La grandezza che si conosce con minore
incertezza è il tempo. Dal 1967, l’ International System of Measurements basa
la misura del tempo, il secondo, sulla base delle proprietà atomiche del Cesio. In
particolare, un secondo corrisponde a 9.192.631.770 cicli della radiazione emessa
sulla transizione tra due livelli di energie definiti nell’atomo di Cesio. Risul-
tati di circa un decennio fa ci dicono che la più piccola incertezza misurabile è
dell’ordine dei 10−17 seconds. Nessun’altra grandezza in natura è misurabile con
RAPPRESENTAZIONE DEI NUMERI 15

tale precisione. Quello che però è importante è che la scienza non necessita di
rappresentazioni esatte dei numeri!
Per quanto riguarda la rappresentazione nei computer è intanto ovvio che
non sono rappresentabili i numeri irrazionali, che sono la “maggioranza”. Quello
che è più interessante è che, come abbiamo visto, nemmeno i numeri razionali,
salvo “pochi”, sono rappresentabili in modo esatto. In sostanza, si commette
sempre un errore che dipende dalla dimensione delle parole.

3.3 Virgola fissa e virgola mobile


Il modo più diretto per rappresentare numeri reali è quello di usare la forma
posizionale con potenze positive e negative
n
X
x= aκ 2κ .
κ=−m

Chiaramente questo corrisponde ad associare a x ∈ Q la stringa

x ≡ an an−1 . . . a1 a0 . a−1 , . . . a−m+1 a−m . (23)

Ad esempio 1010.111012 in base 10 corrisponde a

1010.1012 10.62510 .

La rappresentazione (23) è chiamata rappresentazione in virgola fissa. Nelle ap-


plicazioni scientifiche uno spesso necessita di rappresentare numeri molto pic-
coli e numeri molto grandi. Tale esigenza è ben contemplata dall’uso della
rappresentazione in virgola mobile, che ben si addice a rappresentare ad es-
empio la costante di Planck 6.62607015 · 10−34 J · s e il numero di Avogadro
6.02214076 · 1023 mol−1 . Questi due numero posseggono congiuntamene una
enorme dinamica e, pertanto, la rappresentazione con esponente ne facilita la
rappresentazione. In generale, la rappresentazione floating-point si presenta nel
modo seguente
± caratteristica mantissa
Perchè si chiama virgola mobile? Il termine nasce in contrapposizione alla rapp-
resentazione (23), dove le operazioni aritmetiche non richiedono la fluttuazione
della virgola. Ad esempio, se voglio fare la somma di x = 1101.0011 e y =
0101.1011 si procede allineando sulla virgola fissa:

0001.0011+
0101.1011 =
0110.1110

Nello standard IEEE 754 si usa precisone semplice e precisione doppia.


il numero di bit dedicati alle varie parti (segno, esponente e mantissa) per la
semplice e la doppia precisione sono i seguenti Una scelta interessante dello
16

bit segno caratteristica mantissa


32 1 8 23
64 1 11 52

standard IEEE 754 è quella dell’hidden bit. In sostanza, non viene rappresentato
il primo bit della mantissa, assumendo che questo sia sempre 1. Questo è reso
possibile dal fatto che posso sempre giocare con la virgola mobile. Ad esempio,
dato .0101 · 200110 si ha

.0101 · 200110 . 1 010 · 200011 .

Il “boxed bit” non viene rappresentato e risulta pertanto nascosto, dato che si è
assunto che è sempre a 1. La rappresentazione della mantissa segue anch’essa una
convenzione interessante. La caratteristica è rappresentata con eccesso 2r−1 − 1,
dove r è il numero di bit usati (8, 16 per semplice e doppia precisione). Ad
esempio, in precisione semplice, r = 8, quindi la caratteristica si rappresenta con
eccesso 27 − 1 = 127. In questo modo, 127 corrisponde allo 0, sopra si hanno gli
esponenti positive e sotto gli esponenti negativi.

3.4 Errori di rappresentazione


La distinzione tra numeri e loro rappresentazione è di fondamentale impor-
tanza. In realtà come vedremo, la distinzione ha un senso più profondo, che
riguarda l’informazione con cui gli umani interagiscono nell’ambiente. L’apparato
percettivo produce infatti informazione che solo rappresenta una qualche forma
di rappresentazione approssimata del mondo che ci circonda. Questa distinzione
ovviamente riguarda anche i computer dove, come si è già visto si possono rap-
Virgola fissa presentare solo alcuni numeri in modo esatto. Iniziamo con la discussione degli
errori che intervengono nel caso di rappresentazioni in virgola fissa. Ancor prima
definiamo il concetto di errore. Se x ∈ R è il numero in oggetto e xc denota la
sua rappresentazione, allora l’errore assoluto che si commette è

 = |x − xc |. (24)

L’uso del valore assoluto nella definizione serve a contemplare il fatto che gli
errori possono essere sia in eccesso che in difetto, ovvero x − xc può essere sia
positivo che negativo. L’errore assoluto non è tuttavia il numero di reale interesse
per controllare la previsione. Supponiamo di misurare la distanza tra le pareti
in quest’aula e che commetta un errore di 70 cm. Poi riporto la distanza tra il
baricentro della terra e quello della luna e commetto un errore di 70Km. Quale
delle due misure è più accorata? E’ chiaro che sebbene commetta un errore 10.000
volte superiore non posso parlare di precisione se non si confronta l’errore con il
valore di riferimento. Pertanto, il numero
|x − xr |
r = , (25)
x
RAPPRESENTAZIONE DEI NUMERI 17

denominato errore relativo è il numero appropriato per valutare la precisione.


Talvolta si moltiplica per 100 e si chiama errore relativo percentuale. Veniamo
all’aula e alla luna. Supponiamo che la misura esatta dell’aula sia xa = 1400cm
e che la distanza esatta tra la terra e la luna sia xl = 384, 400Km. Si ha
70
r (aula)% = 100 = 5%
1400
70
r (luna)% = 100 ' 0.018%.
384, 400
Dunque la misura riportata della distanza tra la terra e la luna è molto più
precisa!
Adesso cerchiamo di capire qual è il ruolo della lunghezza della rappresen-
tazione nella precisione. E’ infatti ovvio che la precisione cresce con la lunghezza.
Come? Per questa analisi si capisce subito che conta solo la parte a destra della L’errore sparisce con
virgola in an an−1 . . . a1 a0 . a−1 , . . . a−m+1 a−m . Quindi, per discutere di pre- 2−n
cisione basta basta limitarci a numeri minori reali di 1. Con la virgola fissa,
troncamento con n bit si rappresentano numeri mediante
n
X
xc = aκ 2−κ .
κ=1

Questo vuol dire che, nel peggiore dei casi, si commette l’errore

X −∞
X
= 2−κ = 2−n 2−κ = 2−n .
κ=n+1 κ=1

Questo è importante! Infatti vuol dire che gli errori si fanno sparire presto con la
crescita della dimensione delle parole. Con 10 bit l’errore è meno di un millesimo,
con 20 si riduce ad un milionesimo, con 30 ad un miliardesimo!
Cosa succede in virgola mobile? Si è già discusso che la precisione si individua Virgola mobile, preci-
con l’errore relativo. Quindi si vede subito che in virgola mobile la precisione è sione di macchina e
conferita dalla mantissa. Infatti l’errore relativo risulta cifre significative

|x − xc | 2−n · 2c 2−n
r = ≤ = ≤ 2−n+1 .
xc m·2 c m

Infatti, nel caso peggiore m = 1/2 (solo il bit nascosto) e pertanto r = 2−n+1 .
Nel caso di precisione singola si ha 2 = 2−23 ' 1.19 · 10−7 . In sostanza, ci sono
circa sette cifre significative. In precisione doppia invece e = 2−52 ' 2.22·10−16 ,
cosı̀ che si raggiungono circa sedici cifre significative! Naturalmente, la forza delle
rappresentazioni in virgola mobile è nella grande dinamica della loro rappresen-
tazione. Infatti, come si vede nell’Esercizio 51 si ha un range di rappresentazione
dell’ordine del 10±38 ! Dunque si possono rappresentare numeri molto piccoli e
numeri molto grandi, ma attenzione agli errori assoluti.
18

ESERCIZI E COMPLEMENTI

4 Complementi
4.1 Progressioni geometriche
Dato q ∈ R si chiama progressione geometrica la somma

S = 1 + q + . . . + q n−1 + q n . (26)

Teorema 2. Tale somma risulta


1 − q n+1
S= . (27)
1−q

Dimostrazione. Dall’Eq. (26) si ha

qS = q + q 2 + . . . + q n + q n+1 .

Sottraendo membro a membro da questa la (26)

(q − 1)S = q n+1 − q n ,

da cui si conclude la validità di (26).


RAPPRESENTAZIONE DEI NUMERI 19

4.2 Numeri periodici e il paradosso di Zenone


Zenone concepı̀ un paradosso molto intrigante con Achille e la Tartaruga. Il
paradosso convince chi lo segue che Achille, “pié veloce” non riuscirà mai a rag-
giungere la Tartaruga. E’ un po’ “paradossale” che dopo secoli il paradosso con-
tinui ad essere considerato tale! In realtà l’ingegnoso costrutto logico di Zenone
è sbagliato. Ecco il motivo ... Calcoliamo il tempo necessario ad Achille per
raggiungere la Tartaruga. Il tempi richiesti ad Achille per raggiungere i cor-
rispondenti spostamenti della Tartaruga sono
A

 t1 = vsA


 T A vT
s1 = vTT · t1 = vA s



 s

 tA
2 = v1A = vvT2 s = vsA vvA
T

 A
sT = vT s

2


 2 vA2
2
vT v2
t3 = v3 s = vsA vT2
A
(28)

 A
3
A
sT = T3 s
 v

 3 vA



 ............



 v n−1
tn = vsA vTn−1

A

 A
 T vn
sn = vTn s.
A

Adesso poniamo q = vT /vA .


Il tempo necessario ad Achille a raggiungere la Tartaruga e lo spazio percorso
dalla tartaruga sono

s X n s 1 s vA s
T = q = = =
vA n=0 vA 1 − q vA vA − vT vA − vT
X ∞   
1 q vT
S=s qn − 1 = s −1 =s =s .
n=0
1 − q 1 − q v A − vT

I valori trovati per T ed S sono perfettamente compatibili con la cinematica:


Achille supera la Tartaruga! Il paradosso emerge per l’errore di ritenere che la
somma di infinite frazioni temporali è infinita.
In fondo, la struttura matematica che svela l’errore logico di Zenone è la
stessa che permette di comprendere i numeri periodici. Insomma ... 0.9̄ = 1,
ovvero 0.9̄ non è solo vicino a 1!

4.3 Basi notevoli


La base 2 ha una interessanti connessioni con basi “speciali”, come la base 8 e
la base 16. Perchè? Prendiamo un esempio. Sia dato il numero x ≡ 110101112 .
20

Come si converte in base 16? Cominciamo con il definire le cifre esadecimali

{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F }.

Per convertire in base 16 si può calcolare in modo diretto, dato che si passa da
una base ad una base più grossa. Esprimendo con la rappresentazione posizionale
si ha

110101112 ≡ 1 · 27 + 1 · 26 + 0 · 25 + 1 · 24 + 0 · 23 + 1 · 22 + 1 · 21 + 1 · 20
= (1 · 23 + 1 · 22 + 0 · 21 + 1 · 20 ) · 24
+ (0 · 23 + 1 · 22 + 1 · 21 + 1 · 20 ) · 20 .

Adesso si ha D ≡ 1 · 23 + 1 · 22 + 0 · 21 + 1 · 20 e 7 ≡ 0 · 23 + 1 · 22 + 1 · 21 + 1 · 20 .
Dunque,
110101112 ≡ D · 161 + 7 · 160 ≡ D716
RAPPRESENTAZIONE DEI NUMERI 21

5 Esercizi
1. [12] Dato il numero x = (12)10 , espresso in rappresentazione decimale,
trovare la sua rappresentazione binaria.
2. [10] Quanti numeri interi senza segno si rappresentano con 11 bit?
3. [13] Qual è il massimo intero positivo - espresso in decimale - che si può
rappresentare in complemento a due con 16 bit? E’ il più piccolo negativo?
4. [17] Dato il numero x = (12)10 , espresso in rappresentazione decimale,
trovare la sua rappresentazione in base 3 e, successivamente convertire il
risultato ottenuto nella base decimale iniziale.
5. 13[ Dato il numero x = (255)10 trovare la sua rappresentazione binaria e la
sua rappresentazione esadecimale;
6. [11] Sono dati x = 1010 e y = 0101. Determinare z = x + y
7. 13[ Dato il numero x = (63)10 trovare la sua rappresentazione binaria e la
sua rappresentazione ottale;
8. [20] Dato x = 1034 determinare la sua rappresentazione in base 3 usando il
metodo delle divisioni successive. Si noti che il risultato è fornito dall’Eq. (3),
che quindi funge da verifica.
9. [21] Dato il numero x = (65)7 convertirlo nella base 5 usando il metodo delle
divisioni successive. Si verifichi poi il risultato attraverso una doppia conver-
sione: prima si trasformi x = (65)7 in base 10, poi si converta il risultato in
base 5
10. [15] Dato x ≡ D6 trovare la sua rappresentazione in base 2 e in base 10.
11. Dato il numero x = F F F F16 trovare la sua rappresentazione in base 2 e in
base 10.
12. [22] Dato il numero x = (2010)3 convertirlo in base 9 e, successivamente
compiere l’operazione inversa convertendo il numero ottenuto in base 9 nella
base 3. E’ possibile eseguire questa operazione in modo molto efficiente senza
bisogno di usare i classici algoritmi di conversione?
Suggerimento: Se analizzino le anologie con gli esercizi (10, 11).
13. [22] Siano x ≡ 324 e y = 124 due numeri rappresentati in base 4. Calcolare
z = x · y usando l’aritmetica della base 4. Verificare successivamente la
congruenza del risultato convertendo in base 10.
Soluzione: Serve costruire preliminarmente la Tavola Pitagorica in base 4 e
usiamo il classico algoritmo della moltiplicazione per le basi posizionali.
? 1 2 3
1 1 2 3
2 2 10 12
3 3 10 21

32 ? 12
130
32b
1110
22

Verifichiamo la congruenza in base 10. Si ha x = 14, y = 6, dunque z = 84.


Del resto z = (1110)4 = 43 + 42 + 41 = 84.
14. [19] Siano x = 12 e y = 111 due numeri in base 3. Calcolare z = x · y.
15. [15] Esprimere in decimale il più grosso numero in base 7 con 3 cifre.
16. [18] Esprimere in decimale il più grosso numero in base b con n cifre.
17. [14] Siano x = (143)5 e y = (244)5 due numeri in base 5. Calcolare z = x + y
18. [16] Dato il numero x = (143)5 , rappresentato in base 5, e il numero y =
12510 , rappresentato in base 10, esprimere z = x · y in base 5.
19. [13] Siano x = 0101, y = 0011 due interi in rappresentazione senza segno.
Determinare z = x + y
20. [20] Siano x = (0111)2 e n = 11. Calcolare y = xn esprimendolo in base 2.
21. [13] Sia x = (0 1| ·{z
· · 1})2 con n ∈ N un numero senza segno. Esprimere, sempre
n
in base due, il numero y = 1 + x
· · 1})2 con n ∈ N un numero senza segno. Esprimere, sempre
22. [13] Sia x = (0 1| ·{z
n
in base due, il numero y = 2 · x.
23. [20] Sia x = ab · ab} con n ∈ N un numero in base 5, dove a 6= b e a, b possono
| {z
n
prendere solo valori {0, 4}. E’ vero che x è divisibile per 510 ? Se è falso, quale
scelta di a, b rende x divisibile per 510 ?
24. [18] Sia x = 12345607 un numero in base 7. Dimostrare che x è divisibile per
710 .
25. [18] Sia x un numero rappresentato in una qualunque base b. Dimostrare che
se x = an an−1 · · · a1 0 allora x è divisibile per b e determinare il quoziente
della divisione x/b.
26. [22] Consideriamo una rappresentazione posizionale dei numeri in base 5
senza segno con n cifre. Qual è il numero più grosso che si può rappresentare?
Esprimerlo in forma decimale.
27. [30] Si vuole costruire uno termometro digitale che rilevi la temperatura nel
range 35 − 42 gradi con un errore massimo dello 0.1% Proporre una rappre-
sentazione in virgola fissa adeguata dei numeri per il rilievo della temperatura
definendo il numero di bit della parte intera e della parte frazionaria.
28. [20] Siano x = 011, y = 0010 due interi rappresentati in complemento a due.
Determinare:
– z =x+y
– z =x−y
– z =x·y
– z = x/y
Discutere il risultato della divisione.
29. [14] Sia data una rappresentazione senza segno con 4 bit. Qual è il range
dei numeri rappresentabili? Qual è invece il range se la rappresentazione è
in complemento a due?
30. [15] Siano x = 1444 e y = 1111 due numeri in base 6 senza segno. Deter-
minare z = x + y
RAPPRESENTAZIONE DEI NUMERI 23

31. [18] Sia x ≡ 0010 un numero rappresentato in base due. Calcolare y = 2 · x.


Soluzione: Si ha
x = 0 · 23 + 0 · 22 + 1 · 21 + 0 · 20 .
Dunque

y = 2 · (0 · 23 + 0 · 22 + 1 · 21 + 0 · 20 ) = 0 · 24 + 0 · 23 + 1 · 22 + 0 · 21 + 0 · 20 .

Pertanto
y ≡ 0010 0
si ottiene dalla rappresentazione di x per spostamento a destra di una po-
sizione.
32. [18M] Sia x ∈ N rappresentato in binario come x ≡ an−1 an−2 . . . a0 . Di-
mostrare che la rappresentazione di y = 2m x è

y ≡ an−1 an−2 . . . a0 0| .{z


. . 0}
m digits

33. [19] Si consideri una rappresentazione in base due di numeri interi in comple-
mento a due su 16 bit. Sia x un numero correttamente rappresentato in tale
rappresentazione. Quale delle seguenti risulta vera a proposito del numero
y : y = x2 ?
(a) y ≡ 0 (ρ(y) = 0) risulta possibile a seconda del valore di x anche se
x 6= 0;
(b) y < x risulta una soluzione possibile a seconda del valore di x;
(c) l’operazione produce 222 se x = 111;
(d) l’operazione non risulta congruente in complemento a due ed ha senso
solo per i numeri interi senza segno;
(e) nessuna delle precedenti.
Motivare la risposta.
34. [M25] Sia x ≡ [an−1 , an−2 , . . . , a1 , a0 ] un numero rappresentato in comple-
mento a due, dove an−1 è il bit di segno. Quando si genera overflow per il
numero y : y = 2x?
Soluzione: La rappresentazione di y diventa:

y ≡ [an−2 , . . . , a1 , a0 , 0]

e, quindi, an−1 si perde nella rappresentazione. Come vedremo questo, natu-


ralmente, non origina necessariamente errori! Distinguiamo i casi di numeri
positivi e negativi, dato che ovviamente per x = 0 si ha y = 0 e la rappre-
sentazione di y è congruente.
– Se x > 0 si ha an−1 = 0. Adesso se an−2 = 0 si ha che y continua
ad essere correttamente rappresentato, dato che il segno diventa an−2 ,
coerentemente con la rappresentazione dei positivi. Dunque, tutto fun-
ziona correttamente. Invece, se an−2 = 1 allora la moltiplicazione per
due produce inconsistenza nel segno e si genera un overflow. Diamo
24

un’interpretazione in base 10 per aiutare l’intuizione. Se an−2 = 1, il


più piccolo x è rappresentato da
0, 1, 0, 0, . . . , 0 ≡ 2n−2 .
| {z }
n−2 bit

n−1
Raddoppiando si ha y = 2 che non è rappresentabile in complemento
a due, dato che il massimo numero positivo rappresentabile in comple-
mento a due è 2n−1 − 1.
– Se x < 0 allora an−1 = 1. Per dualità, rispetto al caso precedente,
iniziamo con il supporre an−2 = 1. Allora lo spostamento di un bit a
seguito della moltiplicazione conserva il segno in modo coerente. Del
resto, se an−2 = 1 il numero negativo con massimo valore assoluto è il
numero y con rappresentazione
1, 0, 0, . . . , 0
| {z }
n−1 bit

ovvero |y| = 2n−1 , correttamente rappresentabile. Sia invece an−2 = 0.


Allora si ha un overflow, con palese errore nella moltiplicazione, dato che
y risulta rappresentato come positivo. Del resto, ogni numero x rappre-
sentato da
1, 0, an−3 , . . . , a0
è tale che il suo complemento a due risulta
0, 1, ān−3 , . . . , ā0 + 1 > 0, 1, 0, . . . , 0 = |xm |
| {z }
2n−2

Infatti ogni numero maggiore di 2n−2 moltiplicato per due genera numeri
in più grandi in valore assoluto di 2n−1 , dunque non rappresentabili.
Si conclude dunque che se x > 0 si produce overflow se an−2 = 1, mentre
se se x < 0 si produce overflow per an−2 = 0. In termini logici, questo si
riassume esprimendo la generazione di overflow tramite la variabile
o = an−1 ⊕ an−2 ,
dove ⊕ denota l’or esclusivo.
35. [20] Sia x un numero intero senza segno rappresentato su quattro bit. Si
determini un algoritmo per eseguire la divisione per due, ovvero per calco-
lare y = x/2. Siccome in generale la divisione produce numeri razionali, si
consideri l’implementazione della divisione con troncamento.
36. [20] Con riferimento all’esercizio precedente si estenda la soluzione al caso
in cui si desidera rappresentare la soluzione esatta della divisione per due.
Proporre una rappresentazione adeguata a questo scopo.
37. [18M] Dimostrare che per ogni n ∈ N si ha
(
C22n+1 (x) = C2 (x)
C22n (x) = x.
RAPPRESENTAZIONE DEI NUMERI 25

38. [20M] Si consideri una rappresentazione di numeri senza segno su n bit. Che
rappresentazione serve per generare il prodotto z = x · y?
Soluzione: Per rispondere alle opzioni proposte studiamo preliminarmente
cosa succede della moltiplicazione tra due numeri x, y rappresentati su n
bit. Sia
n−1
X n−1
X
x= aκ 2κ , y = bκ 2κ .
κ=0 κ=0

Dunque
n−1
X n−1
X 2n−1
X
z= aκ bh 2κ+h = ci 2i .
κ=0 h=0 i=0

Si può trovare il massimo z, dato che


2n−2
X 2n−1
X
z= ci 2i ≤ 2i = 22n − 1.
i=0 i=0

Ad esempio, per n = 2, si ha z ≤ 1001 = 910 ≤ 24 − 1 = 15. Quindi


un numeri senza segno su n bit, che sono limitati da 2n − 1, nel prodotto
serve una rappresentazione con il doppio dei bit 2n con limitazione superiore
a 22n−1 . Chiaramente, come visto nel caso n = 2, il massimo numero che
emerge dal prodotto, z = 9 è più piccolo del bound. Come altro esempio, per
n = 8, si ha che per il massimo rappresentabile 25510 si produce x2 ≡ 65025,
mentre il massimo su 16 bit è 65536.
39. [23M] Estendi il risultato dell’esercizio precedente al problema della rapp-
resentazione del numero intero senza segno y = xm a partire da x numero
intero senza segno su n bit. Che rappresentazione serve per y?
40. [16] E’ vero che 0.56 = 1?
Soluzione: Comunque si prende un numero in base b si ha che

X
x = cb−1 + cb−2 + . . . = c b−κ
κ=1
c
= .
b−1

Quindi, 0.(b − 1) = 1 e, conseguentemente 0.56 = 1.


41. [M28] Estendi la proprietà della finitezza del cambiamento di base ad ogni
coppia di basi
42. [M25] Dimostrare che un numero in base 10 ha rappresentazione finita in
base 2 solo se termina per 5.
43. [16] Sia x ≡ 578 . Convertilo in base 2 usando le idee sulle basi notevoli
illustrate all’inizio della sezione.
44. [M22] Determinare la proprietà generale che permette il passaggio tra le
basi notevoli.
26

45. [18] Rappresentare x ≡ 0.610 in base 2. Prima di rappresentarlo scoprire se


la sua rappresentazione è finita.
46. [M20] Sia x = (0, . . . , 5)10 un numero la cui ultima cifra decimale cor-
risponde a 5. E’ vero che la sua rappresentazione in base 2 è finita?
47. [18] Si consideri una rappresentazione su 4 bit con i numeri x = 1011 e
y = 1111. Determinare z = x + y
Soluzione: Si ha

1011+
4
1111 ≡
1010.

L’interpretazione in base 10 è che x = −5 y = −1. Dunque z = −6. Si noti


nella somma l’overflow che è tuttavia congruente sulla rappresentazione.
48. [17] Si consideri una rappresentazione su 4 bit con i numeri x = 1101 e
y = 0011. Determinare z = x − y
Soluzione: Si ha che C2 (y) = 1101. Dunque

1101+
4
1101 ≡
1010.

Come si vede la soluzione è negativa. Per interpretarla si può determinare


il valore assoluto mediante C2 (1010) = 0101 + 1 = 0110. In base 10, chiara-
mente x = −3, y = +3, z = −6.
49. [17] Si consideri una rappresentazione su 4 bit con i numeri x = 0011 e
y = 1101. Determinare z = x − y
Soluzione: Si ha che C2 (1101) = 0010 + 1 = 0011. Dunque

0011+
4
0011 ≡
0110.

Chiaramente in questo caso la soluzione è positiva. In base 10, l’interpretazione


è che x = +3, y = −3, z = +6.
50. [M25] Sia n ∈ N. Dimostrare che il numero di bit b necessario per la sua
rappresentazione è
b = b1 + log nc (29)
Dimostrazione. Dato n ∈ N allora

∃r ∈ N : 2r ≤ n < 2r+1 . (30)

Quindi
r ≤ log n < r + 1 → r + 1 ≤ b1 + log nc < r + 2.
RAPPRESENTAZIONE DEI NUMERI 27

Adesso, poni b = r + 1, cosı́ che si ha

b ≤ b1 + log nc < b + 1. (31)

Da (30) si ha che b = r + 1 è il numero di bit necessario a rappresentare n.


Del resto si sa che se n = 2r allora b = b1 + log nc. Pertanto, congiungendo
con (31) segue la tesi.

51. [25] Considera la rappresentazione IEEE 754. Qual è il range di rappresen-


tazione?
Soluzione: Analizziamo il caso della precisione semplice. Il massimo intero
positivo è

xmax ' 2255−127 = 2128 ' 3.40282347 · 1038


xmin ' 2−126 ' 1.1754944 · 10−38

Quali sono i valori per la doppia precisione?


52. [M20] Discuti il fatto di mettere al denominatore dell’errore relativo il valore
del computer invece che quello vero produce uno scarto che risulta essere
un’approssimazione di ordine superiore.
53. [M30] Si consideri la seguente rappresentazione:

x = an n! + an−1 (n − 1)! + · · · + a2 2! + a1

dove 0 ≤ aκ ≤ κ per 1 ≤ κ ≤ n e an 6= 0. Trovare la rappresentazione


an an−1 · · · a2 a1 per un numero espresso in base decimale.

Potrebbero piacerti anche