rappresentazione dell’informazionelia.disi.unibo.it/.../05-rappresentazionenumeri.pdf ·...

59
1 Internamente a un elaboratore, ogni informazione è rappresentata tramite sequenze di bit (cifre binarie) Una sequenza di bit non dice “che cosa” essa rappresenta Ad esempio, 01000001 può rappresentare: l’intero 65, il carattere ‘A’, il boolean ‘vero’, … … il valore di un segnale musicale, … il colore di un pixel sullo schermo... RAPPRESENTAZIONE DELL’INFORMAZIONE

Upload: others

Post on 07-Oct-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

1

Internamente a un elaboratore, ogni

informazione è rappresentata tramite

sequenze di bit (cifre binarie)

Una sequenza di bit non dice “che cosa”

essa rappresenta

Ad esempio, 01000001 può rappresentare:

l’intero 65, il carattere ‘A’, il boolean ‘vero’, …

… il valore di un segnale musicale,

… il colore di un pixel sullo schermo...

RAPPRESENTAZIONE DELL’INFORMAZIONE

Page 2: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

2

Originariamente la rappresentazione binaria è stata utilizzata per

la codifica dei numeri e dei caratteri

Oggi si digitalizzano comunemente anche suoni, immagini, video e

altre informazioni (informazioni multimediali)

La rappresentazione delle informazioni numeriche è ovviamente

di particolare rilevanza

A titolo di esempio, nel corso ci concentreremo sulla

rappresentazione dei numeri interi (senza o con segno)

Dominio: N = {…,-2, -1, 0, 1, 2, …}

INFORMAZIONI NUMERICHE

Page 3: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

3

Dominio: N = { 0,1,2,3, …}

Rappresentabili con diverse notazioni

non posizionali

ad esempio la notazione romana:

I, II, III, IV, V, .... IX, X, XI…

Risulta difficile l’utilizzo di regole

generali per il calcolo

posizionale

1, 2, .. 10, 11, ... 200, ...

Risulta semplice l’individuazione di

regole generali per il calcolo

NUMERI NATURALI (interi senza segno)

Page 4: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

4

Concetto di base di rappresentazione B

Rappresentazione del numero come

sequenza di simboli (cifre) appartenenti

a un alfabeto di B simboli distinti

ogni simbolo rappresenta un valore

compreso fra 0 e B-1

Esempio di rappresentazione su N cifre:

dn-1 … d2 d1 d0

NOTAZIONE POSIZIONALE

Page 5: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

5

Il valore di un numero espresso in questa

notazione è ricavabile a partire dal valore rappresentato da ogni

simbolo

pesandolo in base alla posizione che occupa

nella sequenza

dn-1 … d2 d1 d0

Posizione 0:

pesa B0 (unità)

Posizione 1:

pesa B1

Posizione n-1:

pesa Bn-1

NOTAZIONE POSIZIONALE

Page 6: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

6

In formula:

dove B = base

ogni cifra dk rappresenta un valore fra 0 e B-1

v d Bk

k

k

n

0

1

Esempio (base B=4):

1 2 1 3

d3 d2 d1 d0

Valore = 1 * B3 + 2 * B2 + 1 * B1 + 3 * B0 = centotre

NOTAZIONE POSIZIONALE

Page 7: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

7

Quindi, una sequenza di cifre non è inter-

pretabile se non si precisa la base in cui è

espressa

Esempi:

Stringa Base Alfabeto Calcolo valore Valore

“12” quattro {0,1,2,3} 4 * 1 + 2 sei

“12” otto {0,1,...,7} 8 * 1 + 2 dieci

“12” dieci {0,1,...,9} 10 * 1 + 2 dodici

“12” sedici {0,..,9, A,., F} 16 * 1 + 2 diciotto

NOTAZIONE POSIZIONALE

Page 8: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

8

Inversamente, ogni numero può essere

espresso, in modo univoco, come

sequenza di cifre in una qualunque base

Esempi: Numero Base Alfabeto Rappresentazione

venti due {0,1} “10100”

venti otto {0,1,...,7} “24”

venti dieci {0,1,...,9} “20”

venti sedici {0,..,9, A,., F} “14”

NOTAZIONE POSIZIONALE

Non bisogna confondere un numero con

una sua RAPPRESENTAZIONE!

Page 9: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

Rappresentazione in base p

Metodo posizionale: ogni cifra ha un peso

Esempio: 123 = 100 +20 +3

• Di solito noi usiamo la base decimale

• Un numero generico di m cifre è rappresentato in

base p dalla sequenza: an, an-1, an-2,..., a0

an : cifra più significativa

a0 : cifra meno significativa

n = m-1

ai {0, 1, ..., p-1}

Page 10: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

• Un numero naturale N, composto da m cifre, in base

p, si esprime come:

Rappresentazione in base p

n

i

i

i

n

n

n

np papapapapaN0

0

0

1

1

1

1 ...

• Esempio in base decimale (p=10):

58710 = 7·100 + 8·101 + 5·102

• Posso rappresentare i numeri nell’intervallo discreto:

[0 , pm - 1]

Page 11: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

• Base binaria: p=2; cifre ai {0, 1} chiamate bit (binary digit)

• Otto bit sono chiamati byte

Esempio, con m=5:

110112 = (1·24+1·23+0·22+1·21+1·20)10 = 2710

• Posso rappresentare i numeri nell’intervallo discreto: [0 , 2m -1]

• Esempio con m=8: rappresento numeri binari: [000000002 , 111111112], ovvero: [0 , 255]

Rappresentazione in base due

Page 12: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

12

Con N bit, si possono fare 2N combinazioni

Si rappresentano così i numeri da 0 a 2N-1

Esempi con 8 bit, [ 0 …. 255 ]

In C: unsigned char = byte

con 16 bit, [ 0 …. 65.535 ]

In C: unsigned short int (su alcuni compilatori)

In C: unsigned int (su alcuni compilatori)

con 32 bit, [ 0 …. 4.294.967.295 ]

In C: unsigned int (su alcuni compilatori)

In C: unsigned long int (su molti compilatori)

NUMERI NATURALI: valori rappresentabili

Page 13: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

Conversioni di base

• Per convertire da base due a base 10:

– Usare la sommatoria illustrata nella slide precedente

• Per convertire da base dieci a base due:

– Metodo delle divisioni successive:

Page 14: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

Metodo delle divisioni successive

operazione quoziente resto

27:2 13 1 a0

13:2 6 1 a1

6:2 3 0 a2

3:2 1 1 a3

1:2 0 1 a4

Esempio: Esprimere in base 2 il numero naturale 2710

2710= (11011) 2

Page 15: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

Operazioni sui Numeri Binari:

Addizione • Le cifre sono 0 e 1 ed il riporto (carry) può essere solo 1

Riporto

precedente Somma Risultato Riporto

0 0 + 0 0 0

0 0 + 1

1 + 0 1 0

0 1 + 1 0 1

1 0 + 0 1 0

1 0 + 1

1 + 0 0 1

1 1 + 1 1 1

Page 16: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

Addizione e riporto (carry) • Esempio:

1 riporto

0101 + (510)

1001 = (910)

------

1110 (1410)

111 riporti

1111 + (1510)

1010 = (1010)

-------

carry 11001 (2510 se uso 5 bit; 910 se considero 4 bit: OVERFLOW)

Page 17: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

Sottrazione

• Le cifre sono 0 e 1 ed il prestito può essere solo 1 Prestito

precedente differenza Risultato Prestito

0 0 - 0 0 0

0 1 - 0 1 0

0 1 - 1 0 0

0 0 - 1 1 1

1 0 - 0 1 1

1 1 - 0 0 0

1 1 - 1 1 1

1 0 - 1 0 1

Page 18: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

Basi ottale ed esadecimale • Base ottale: p=8; ai {0, 1, 2, 3, 4, 5, 6, 7}

– Esempio: 2348 = (2·82+3·81+4·80)10 = 15610

• Base esadecimale: p=16; ai {0, 1, 2, …, 9, A, B, C, D, E, F} – Esempio: B7F16 = (11·162+7·161+15·160)10 = 294310

– Notare: “11” al posto di “B” e “15” al posto di “F”, i loro

equivalenti in base dieci

• Conversione dalla base 2 alla base 8 o 16: si considerano gruppi di tre o 4 cifre binarie

• Es: 001 010 110 111 si traduce ogni tripla nella corrispondente cifra ottale

Page 19: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

19

Esempio (supponendo di avere solo 7 bit per la rappresentazione)

60 + 0111100

99 = 1100011

----- --------

135 10011111

• Questo errore si chiama overflow

• Può capitare sommando due numeri dello stesso segno il cui risultato non sia rappresentabile utilizzando il numero massimo di bit designati

Errore!

Massimo numero

rappresentabile:

27-1 cioè 127

ERRORI (primissimo assaggio )

Page 20: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

20

Un elaboratore rappresenta numeri interi su

8 bit dei quali 7 sono dedicati alla

rappresentazione del modulo del numero e

uno al suo segno. Indicare come viene

svolta la seguente operazione aritmetica:

59 – 27

in codifica binaria

ESERCIZIO RAPPRESENTAZIONE

Page 21: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

21

Tra i (moduli dei) due numeri si esegue una sottrazione:

0111011

- 0011011

-------

0100000

che vale 32 in base 10

ESERCIZIO RAPPRESENTAZIONE Soluzione

59 0 0111011

-27 1 0011011

Page 22: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

22

Che cosa avremmo dovuto fare se avessimo avuto

27-59 ?

Avremmo dovuto invertire i due numeri, calcolare il risultato, e poi ricordarci di mettere a 1 il bit rappresentante il segno

Per ovviare a tale problema, si usa la notazione in “complemento a 2” (vedi nel seguito), che permette di eseguire tutte le differenze tramite semplici somme

DIFFERENZE TRA NUMERI BINARI

Page 23: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

23

INFORMAZIONI NUMERICHE

La rappresentazione delle informazioni

numeriche è di particolare rilevanza

Abbiamo già discusso i numeri naturali

(interi senza segno) N = { 0,1,2,3, …}

Come rappresentare invece i numeri interi

(con segno)?

Z = { -x, xN - {0}} N

Page 24: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

24

NUMERI INTERI (con segno)

Dominio: Z = { …, -2,-1,0,1,2,3, … }

Rappresentare gli interi in un elaboratore pone alcune problematiche:

• come rappresentare il “segno meno”?

• possibilmente, come rendere semplice l’esecuzione delle operazioni aritmetiche?

Magari riutilizzando gli stessi algoritmi e gli stessi circuiti già usati per i numeri interi senza segno

Page 25: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

25

NUMERI INTERI (con segno)

Due possibilità:

rappresentazione in modulo e segno semplice e intuitiva

ma inefficiente e complessa nella gestione delle operazioni non molto usata in pratica

rappresentazione in complemento a due meno intuitiva, costruita “ad hoc”

ma efficiente e capace di rendere semplice la gestione delle operazioni largamente usata nelle architetture reali di CPU

Page 26: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

26

NUMERI INTERI (con segno)

Rappresentazione in modulo e segno

1 bit per rappresentare il segno

0 + 1 -

(N-1) bit per il valore assoluto

Esempi (su 8 bit, Most Significant Bit –MSB- rappresenta il segno):

+ 5 = 0 0000101

- 36 = 1 0100100

Page 27: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

27

NUMERI INTERI (con segno)

Rappresentazione in modulo e segno

Due difetti principali:

occorrono algoritmi speciali

per fare le operazioni

se si adottano le usuali regole, non è verificata la proprietà X + (-X) = 0

occorrono regole (e quindi circuiti) ad hoc

due diverse rappresentazioni per lo zero

+ 0 = 00000000 - 0 = 10000000

Ad esempio:

(+5) + (-5) = -10 ???

+5 0 0000101

-5 1 0000101

--- ----------

0 1 0001010

Page 28: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

28

NUMERI INTERI (con segno)

Rappresentazione in complemento a due

si vogliono poter usare le regole standard per

fare le operazioni

in particolare, si vuole che

X + (-X) = 0

la rappresentazione dello zero sia unica

anche a prezzo di una notazione più complessa,

meno intuitiva, e magari non (completamente)

posizionale

Page 29: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

NUMERI INTERI (con segno)

Rappresentazione in complemento a due

si vogliono poter usare le regole standard per

fare le operazioni

in particolare, si vuole che

X + (-X) = 0

la rappresentazione dello zero sia unica

anche a prezzo di una notazione più complessa,

meno intuitiva

Page 30: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

Rappresentazioni dei Numeri

• Il bit più significativo rappresenta il segno del numero: 0

per positivi, 1 per negativi

• La rappresentazione di un numero positivo si ottiene

codificando il valore assoluto del numero con i bit

restanti

• La rappresentazione di un numero negativo si

ottiene in tre passi:

– Si rappresenta in complemento a due il numero positivo

con lo stesso valore assoluto del numero negativo da

codificare

– Si invertono tutti i bit

– Si somma 1 al risultato ottenuto al passo precedente

Page 31: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

Quindi:

• per calcolare il numero negativo -|v|

occorre:

• prima invertire tutti i bit della

rappresenta-zione di |v| poi aggiungere 1

al risultato

Page 32: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

Esempio

• Esempio con 4 bit a disposizione

• +5 -> 0101

• -5 -> :

– La rappresentazione del complemento a due

di +5 è 0101

– Invertendo tutti i bit si ottiene 1010

– Sommando 1 si ottiene 1011 -> -5

Page 33: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

Ottenere un numero con segno data

la rappresentazione in CPL2

• Se il primo bit è 0 il numero è positivo: per calcolarne il

valore assoluto si esegue la conversione da binario a

decimale

• Se il primo bit è 1 il numero è negativo:

– Si ignora il primo bit

– Si invertono i bit restanti

– Si converte da binario a decimale

– Si somma 1 al numero così ottenuto per ottenere il valore

assoluto del numero negativo

– Es. 1011. si esclude il primo bit. Invertendo 011 si ottiene

100 che è la codifica di 4, si aggiunge 1, quindi si ottiene

il valore assoluto 5, il risultato è -5

Page 34: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

• Usando m bit: (-N)CPL2 = (2m - N10)2

• Esempio (m=3): (-N)CPL2 = (23 - N10)2

Complemento a due (CPL2)

Num. intero base

10 Trasformazione

Num. intero, base

2, CPL2, m=3

-4 8 - 4 = 4 410 = 100

-3 8 - 3 = 5 510 = 101

-2 8 - 2 = 6 610 = 110

-1 8 - 1 = 7 710 = 111

0 nessuna 010 = 000

1 nessuna 110 = 001

2 nessuna 210 = 010

3 nessuna 310 = 011

Page 35: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

Complemento a due (CPL2)

• Posso rappresentare i numeri nell’intervallo discreto: [-2m-1 , 2m-1 - 1] – Asimmetria tra negativi e positivi

– Esempio (m=8): [-128, +127], perché -27 = -128 e 27 - 1 = +127

• Tutti i numeri negativi cominciano con il bit più significativo posto a “1”, mentre tutti i positivi e lo zero iniziano con uno “0”

Page 36: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

Somma e sottrazione in CPL2

• Somma: come per i naturali

• Sottrazione: N1 - N2 = N1 + (-N2)CPL2

• Carry:

– Il carry non viene considerato!

• Overflow:

– Se, sommando due interi di m bit dotati di segno

concorde, ottengo un risultato di segno discorde (sempre

considerando m bit), allora si ha un overflow (il risultato

non è codificabile su m bit) e l’operazione è errata

– L’overflow non può verificarsi se gli operandi sono di

segno discorde

Page 37: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

Rappresentazione in eccesso

Nella notazione in eccesso una parte di numerali disponibili si usa per

rappresentare i numeri negativi e la restante per rappresentare lo

zero e I numeri positivi. Si trasla l’origine dell’asse che rappresenta i

numeri naturali e si usano I numerali che precedono l’origine cosi’

determinata per rappresentare I numeri negativi

Se n=8 si possono rappresentare tutti I numeri da 0 a 255. Con N=127

ho due intervalli da 0 a 126 che si usano per rappresentare I numeri

negativi da -127 a 1, il numerale 127 che rappresenta lo 0 e I

restantipositivi da 1 a128

Page 38: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

38

Rappresentazione dei Numeri:

NUMERI RAZIONALI

Ovviamente rappresentazione posizionale vale anche per numeri “con virgola”, avendo l’accortezza di pesare le cifre a dx della virgola con potenze negative della base e via via decerescenti mano a mano che ci si sposta verso destra. Un numero a con N cifre a destra della virgola ed M a sinistra vale:

Rappresentazione in virgola mobile (mantissa ed esponente), utilizzando base 2

Standard IEEE 754 (rappresentazione float a 32 bit):

- Bit più significativo per segno mantissa (0 per positivi, 1 per negativi)

- 8 bit per l’esponente (notazione in complemento a 2)

- Ultimi 23 bit per mantissa in forma normale

1

*M

ii

i N

a c b

Quindi, come si converte

un numero razionale da

decimale a binario?

Page 39: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

39

• zero si rappresenta ponendo a 0 tutti i bit di mantissa ed esponente

• +∞ e –∞ si possono rappresentare ponendo a 1 tutti i bit dell’esponente e a 0 tutti i bit della mantissa

• Not a Number (NaN) ponendo a 1 tutti i bit dell’esponente e la mantissa diversa da 0

Nel caso di doppia precisione – double: 11 bit per esponente, 52 per mantissa

Valori massimo e minimo rappresentabili Interi senza segno 0 4294967295

Interi con segno -2147483647 2147483647

Interi in complemento a 2 -2147483648 2147483647

Reali in sing. prec. (modulo) 1.401298*10-45 3.402823*1038

Reali in doppia prec. (modulo) 4.940656*10-324 1.797693*10308

Rappresentazione dei Numeri:

NUMERI RAZIONALI

Page 40: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

40

Es: 22,75

1. Si trasforma da decimale a binario conservando la virgola

22.75=10110.11 (la parte decimale 0.75=0.5+0.25 corrisponde alle

potenze di 2-1 e 2-2)

2. Si trasla la virgola di tanti posti a sx quanti ne servono a far diventare il

numero minore di 2(cioè a lasciare la virgola a dx del bit più significativo):

1.011011

3. Si moltiplica il numero per una potenza di due pari al numero di posti di

cui è stata spostata la virgola: 24, la cui rappresentazione in eccesso a

127 è 4+127=131 =10000011

4. Si scrive il bit di segno (0) quindi i primi 8 bit che rappresentano

l’esponente di 2 seguiti dalla parte frazionaria della mantissa (23 bit): 0

10000011 01101100000000000000000

N.B a causa del numero limitato di cifre a disposizione, un numero si puo’

rappresentare esattamente in un calcoltaore solo se la sua parte

frazionaria è esprimibile come somma di un numero limitato di potenze di

2 altrimenti lo si approssima a quello ad esso più vicino

Rappresentazione dei Numeri:

NUMERI RAZIONALI

Page 41: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

41

• Se si sommano due numeri positivi tali che il risultato sia maggiore del massimo numero positivo rappresentabile con i bit fissati (lo stesso per somma di due negativi)

• Basta guardare il bit di segno del risultato: se 0 (1) e i

numeri sono entrambi negativi (positivi) overflow

Errori di Approssimazione: OVERFLOW

Page 42: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

42

ERRORI NELLE OPERAZIONI

Attenzione ai casi in cui venga invaso il bit più significativo (bit di segno)

Esempio

60 + 00111100 75 = 01100011 ----- -------- 135 10011111

Questo errore si chiama invasione del bit di segno; è una forma di overflow

Può accadere solo sommando due numeri dello stesso segno, con modulo sufficientemente grande

Errore!

Si è invaso il bit di segno,

il risultato è negativo!

Page 43: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

43

Errori di Approssimazione: ERRORI DI

ARROTONDAMENTO e UNDERFLOW

Tutti i numeri non interi si approssimano al numero razionale più vicino con rappresentazione finita (pensare a ma anche a 0.1)

Precisione dell’ordine di 2n, dove n è il numero di bit dedicati alla mantissa

Due numeri che differiscono per meno della precisione sono considerati uguali => errore di arrotondamento

Se un numero è più piccolo della precisione, allora viene approssimato con 0 => errore di underflow

Page 44: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

44

Propagazione “catastrofica” in alcuni algoritmi quando operandi (numeri razionali) molto diversi o molto simili

1) Molto diversi: il più piccolo dei due operandi perde precisione a causa spostamento mantissa (necessario per svolgere operazione: stessa mantissa del più grande)

Esempio:

se a sufficientemente grande e b sufficientemente piccolo

a + b = a

(chi propone un esempio concreto in rappres. IEEE754?)

PROPAGAZIONE degli ERRORI

Page 45: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

45

a= 68833152

b= 2309657318129664

a= 0 10011001 0000011010010011110000

b= 0 10110010 0000011010010011110000

Per eseguire la somma devo incolonnare i numeri, quindi a deve essere

espresso con lo stesso esponente di 2 di b. L’esponente di a è 26

quello di b 51. La differenza tra questi numeri è 25. La mantissa di a

si dovrebbe riscrivere spostando le cifre di altrettante posizioni

verso destra. Poichè il numero massimo di cifre per la mantissa è

23, il risultato è che la mantissa sarà rappresentata come una

sequenza di 0

0 10110010 00000000000000000000000 + ....

0 10110010 0000011010010011110000 =

Quindi un’assurdità!

PROPAGAZIONE degli ERRORI

Page 46: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

46

Propagazione “catastrofica” in alcuni algoritmi quando operandi (numeri razionali) molto diversi o molto simili

2) Molto simili: differenza fra due numeri molto vicini

Esempio (in base 10 per semplificare; mantissa con 3 cifre significative dopo virgola):

a = 1.000x103; b = 999.8x100

a – b = (1.000x103) – (0.999x103) = 1.000x100, che è piuttosto diverso da 0.2!

Nota che diversi algoritmi possono produrre errori molto differenti. Ad esempio (x = 3.451x100, y = 3.450x100):

x2 – y2 = 1.190x101 – 1.190x101 = 0!!!

x2 – y2 = (x + y) (x - y) = (6.901x100) (1.000x10-3) = 6.901x10-3

PROPAGAZIONE degli ERRORI

Page 47: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

47

Ad esempio, un tipo fondamentale di dato da rappresentare è costituito dai singoli caratteri

Idea base: associare a ciascun carattere un numero intero (codice) in modo convenzionale

Codice standard ASCII (1968)

ASCII definisce univocamente i primi 128 caratteri (7 bit – vedi tabella nel lucido seguente)

I caratteri con codice superiore a 127 possono variare secondo la

particolare codifica adottata (dipendenza da linguaggio naturale: ISO 8859-1 per alfabeto latino1, …)

Visto che i caratteri hanno un codice intero, essi possono essere considerati un insieme ordinato (ad esempio: ‘g’ > ‘O’ perché 103 > 79)

Rapida Nota sulla

Rappresentazione dei Caratteri

Page 48: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

48

Tabella ASCII standard

Page 49: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

49

Internamente, un elaboratore adotta per i numeri interi una rappresentazione binaria (base B=2)

Esternamente, le costanti numeriche che scriviamo nei programmi e i valori che stampiamo a video/leggiamo da tastiera sono invece sequenze di caratteri ASCII

Il passaggio dall'una all'altra forma richiede dunque un processo di conversione

NUMERI E LORO RAPPRESENTAZIONE

Page 50: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

50

Numero: centoventicinque

Rappresentazione interna binaria (16 bit):

00000000 01111101

Rappresentazione esterna in base 10:

occorre produrre la sequenza di

caratteri ASCII '1', '2', '5'

00110001 00110010 00110101

vedi tabella ASCII

Esempio: RAPPRESENTAZIONE

INTERNA/ESTERNA

Page 51: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

51

Rappresentazione esterna in base 10:

È data la sequenza di caratteri ASCII

'3', '1', '2', '5', '4'

00110011 00110001 00110010 00110101 00110100

Rappresentazione interna binaria (16 bit):

01111010 00010110

Numero:

trentunomiladuecentocinquantaquattro

vedi tabella ASCII

Esempio: RAPPRESENTAZIONE

INTERNA/ESTERNA

Page 52: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

52

Si applica la definizione:

Ciò richiede la valutazione di un polinomio

Metodo di Horner

v d Bk

k

k

n

0

1

= d0 + B * ( d1 + B * ( d2 + B * ( d3 + ... )))

le cifre dk sono note,

il valore v va calcolato

CONVERSIONE STRINGA/NUMERO

Page 53: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

53

Problema: dato un numero, determinare la

sua rappresentazione in una base data

Soluzione (notazione posizionale):

manipolare la formula per dedurre un

algoritmo

v d Bk

k

k

n

0

1

= d0 + B * ( d1 + B * ( d2 + B * ( d3 + ... )))

v è noto,

le cifre dk vanno calcolate

CONVERSIONE NUMERO/STRINGA

Page 54: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

54

Per trovare le cifre bisogna calcolarle una per

una, ossia bisogna trovare un modo per

isolarne una dalle altre

v = d0 + B * (…)

Osservazione:

d0 è la sola cifra non moltiplicata per B

Conseguenza:

d0 è ricavabile come v modulo B

CONVERSIONE NUMERO/STRINGA

Page 55: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

55

Algoritmo delle divisioni successive

si divide v per B

il resto costituisce la cifra meno significativa (d0)

il quoziente serve a iterare il procedimento

se tale quoziente è zero, l’algoritmo termina;

se non lo è, lo si assume come nuovo valore v’, e si itera il procedimento con il valore v’

CONVERSIONE NUMERO/STRINGA

Page 56: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

56

Esempi:

Numero Base Calcolo valore Stringa

quattordici 4 14 / 4 = 3 con resto 2

3 / 4 = 0 con resto 3 “32”

undici 2 11 / 2 = 5 con resto 1

5 / 2 = 2 con resto 1

2 / 2 = 1 con resto 0

1 / 2 = 0 con resto 1 “1011”

sessantatre 10 63 / 10 = 6 con resto 3

6 / 10 = 0 con resto 6 “63”

sessantatre 16 63 / 16 = 3 con resto 15

3 / 16 = 0 con resto 3 “3F”

CONVERSIONE NUMERO/STRINGA

Page 57: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

57

Attenzione ai problemi di arrotondamento in algoritmi

iterativi, possibili anche in casi in cui non ce lo aspettiamo!

Esempio di somma di N numeri naturali #include <stdio.h>

#define N 10000000

main () {

float s=0, x=7;

unsigned int i, is=0; ix=7;

for (i=0; i<N; i++) {

s += x; is += ix; }

printf(“usando float: %.0f x %d = %.0f\n”, x, N, s);

printf(“usando integer: %d x %d = %d\n”, ix, N, is);

}

Esempio di PROPAGAZIONE

in ALGORITMO ITERATIVO

Quale risultato

dall’esecuzione?

Page 58: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

58

Errore già per i = 2396746, s = 16777222

Notazione IEEE 754; perdita della cifra più a destra

dell’addendo 7 (approssimato a 6)

Quindi un risultato finale più basso? NO, NEMMENO

Situazione ancora più complessa: rappresentazione interna alla

Floating Point Unit (FPU) a 80 bit, troncata quando si va in

memoria centrale

Ovviamente stesso problema di arrotondamento su

somma di qualunque coppia di numeri che

differiscono troppo fra loro

E se avessimo a che fare con un ottimizzatore di codice

sufficientemente intelligente?

Esempio di PROPAGAZIONE

in ALGORITMO ITERATIVO

Page 59: RAPPRESENTAZIONE DELL’INFORMAZIONElia.disi.unibo.it/.../05-rappresentazioneNumeri.pdf · Rappresentazioni dei Numeri • Il bit più significativo rappresenta il segno del numero:

59

Algoritmi equivalenti alternativi che riducano la

differenza tra i numeri da sommare

Ad esempio: sommare prima m valori fra loro; poi sommare tra loro i k

risultati (dove ovviamente k*m = n)

Oppure somma di Kahan:

float sum = 0., corr = 0., x = 7., tmp, y; int i;

for (i=0; i<N; i++) {

y = corr + x;

tmp = sum + y;

corr = (sum - tmp) + y;

sum = tmp; }

sum += corr;

COME RISOLVERE/ATTENUARE

IL PROBLEMA?