2 indice sistemi posizionali rappresentazione di numeri sistema
unario storia dei sistemi di numerazione il sistema latino codici
posizionali in varie basi un quiz somme numeri in base 2, 3,..
prodotto in binario base sedici (esadecimale) cambio base esercizi
frazioni 0,1 da base 10 a base due limiti e overflow
Slide 3
3 indice capitolo numeri con segno: NUMERI CON SEGNO numeri con
segno numeri in complemento a uno somme con segno complemento a due
rappresentazione in eccesso di k esercizi sui numeri con segno
Slide 4
4 indice capitolo numeri in virgola mobile : NUMERI IN VIRGOLA
MOBILE rappresentazione di n.i grandi/piccoli precisione limiti
esercizio somma in floating point overflow standard IEEE 754
floating point esercizi fine parte numeri
Slide 5
5 rappresentazione di numeri codifica dei numeri
Slide 6
6 rappresentazione di numeri i primi codici numerici
codificavano un numero = il dato numerico in "unario": per
rappresentare n si usa un simbolo ripetuto n volte (unario: ce un
solo simbolo, luno) uno IseiIII III dueI IsetteIIII III treI I
IottoIIII IIII quattroI I I InoveIII III III cinqueI I I I I
dieciIII II III IIe poi? venti||||| ||||| ||||| ||||| trenta |||||
||||| ||||| ||||| ||||| ||||| ma... per scrivere cento oppure
mille... e unimpresa !!
Slide 7
7 rappresentazione di numeri unario: per codificare n uso un
solo simbolo ripetuto n volte: uno IseiIII III... quattroI I I
InoveIII III III cinqueI I I I I la rappresentazione unaria va bene
per numeri piccoli, oppure per situazioni teoriche (casi
particolari di alcune macchine di Turing lo vedremo in seguito) non
va bene per la scrittura abituale non va bene per il calcolatore...
e l'umanita' se ne e' accorta abbastanza presto !
Slide 8
8 rappresentazione di numeri per semplificare la
rappresentazione di numeri circa 5000 anni fa in Egitto,
Mesopotamia, poi India, Cina, piu tardi in America (centro e sud),
per evitare la ripetizione eccessiva nel caso di numeri maggiori di
10 si introdusse una codifica piu' economica: si usarono dei
simboli diversi per indicare un gruppo di 10, 20, 30, 100, 500,
1000 simboli ecc Il sistema inizialmente non prevedeva un simbolo
per indicare il numero zero, ne' per indicare la cifra zero; per un
sistema posizionale la cifra zero e' importante (indica la mancanza
di numeri di quel peso) e fu introdotto abbastanza presto nel
sistema babilonese (600 anni p.c.), poi reinventato in india, e poi
ritornato nei paesi arabi e in Europa.
Slide 9
9 rappresentazione dei numeri : i sumeri e i babilonesi sono
considerati i piu' antichi i sistemi sumero-babilonesi e egiziani -
anche perche' poco e'rimasto delle prime civilta' indu'
preindoeuropee wedge=cuneo
Slide 10
10 numeri egiziani
Slide 11
11 numeri egizi girino osso del tacco bastone rotolo di
corda
Slide 12
12 numeri egizi un esempio di scrittura di un numero grande:
46206 = 4 x 10.000 (dito indice ripetuto 4 volte) + 6 x 1000 (6
fiori di loto) + 2 x 100 ( 2 rotoli di corda) + 6 unita' (6 barre)
(nessuna decina) (scritto da destra verso sinistra, ma si legge
anche se cambia l' ordine di scrittura: quello che conta e' il
simbolo,non la posiz)
Slide 13
13 codifica numeri nell'antichita' i numeri erano usati per
memorizzare quantita' di oggetti e date di trattati o donazioni e
eventi memorabili, e - dove richiesto - posizioni e date di eventi
astronomici (a uso di predizione per agricoltura o per uso del
re...) molti popoli hanno sviluppato piu' o meno autonomamente vari
sistemi di numerazione, di cui ci interessano alcuni: * babilonesi
(base sessanta, posizioni in gradi sessagesimali delle stelle e
misura del tempo in ore, minuti e secondi) * egiziani (da cui poi i
greci e poi i..) ==>> romani... di seguito cenni dei sistemi
di numerazione * greci e romani * maya (i primi a inventare lo
zero, senza effetti successivi sul resto del mondo) * indu'
(brahmi->devanagari->arabi occidentali->europa
Slide 14
14 numerazione greca gli antichi Greci erano bravissimi in
geometria, ma usavano un sistema di scrivere numeri non
posizionale; Euclide, Archimede, Tolomeo ecc scrivevano i numeri
con il sistema greco (da cui il sistema romano); i numeri
"importanti" erano indicati con le lettere iniziali della parola
usata per indicare tale numero (penta,deka,hekta,... vedi pagina
seguente i matematici greci non usarono il sistema posizionale: un
sistema di numerazione efficiente non era importante per gli studi
di geometria; gli astronomi greci adottarono dai babilonesi l'uso
dello zero (lo zero nel sistema posizionale Babilonese, usato come
marcatore di posizione zero, esso era noto a Ptolomeo, ma non era
considerato un numero, e fu dimenticato)
Slide 15
15 numerazione greca
Slide 16
16 numerazione greca in seguito, per economia di scrittura,
furono adottati in Grecia dei simboli singoli per indicare i numeri
"piu' usati", da 1 a 1000; i simboli usati erano semplicemente
quelli dell'alfabeto; per i numeri dopo il 1000 si usava una
codifica per il peso mille e una codifica diversa per il peso
10.000 - ma il sistema non era posizionale, e cosi' rimase per i
latini
Slide 17
17 numerazione greca
Slide 18
18 numerazione greca per scrivere numeri molto grandi i greci
usavano un sistema misto del simbolico non posizionale puro e con
due pesi (mille e diecimila)...
Slide 19
19 rappresentazione di numeri Dai sistemi di numerazione
babilonesi... greci deriva il sistema di numerazione romano. Il
sistema latino e' un codice non posizionale (ibrido): il valore
numerico associato ad un simbolo dipende in minima parte dalla sua
posizione ed e' in gran parte fisso: (nota semplificazione 4: da
IIII a IV) 1I6 VI11XI 2 II7 VII12XII 3 III8 VIII13XIII 4 IV9
IX14XIV 5 V10X15XV 20XX 30XXX 40XL 50L e, ancora, ->
Slide 20
20 rappresentazione di numeri sistema romano: 1 I 4 IV 5 V 10 X
20 XX 60 LX 30 XXX 70 LXX 40 XL80 LXXX 50 L90 XC 100C600DC
200CC700DCC 300CCC800DCCC 400CD900CM 500D1000M....
Slide 21
21 numeri - il sistema romano le operazioni aritmetiche con il
sistema di numerazione romano o latino sono "piuttosto scomode" Si
provi ad es. verificare che MCMXCVI piu IV = MM (*) oppure : X L V
I I I volte X I X = CMXII (+) ________ (*) 1000+900+90+6 piu' 4 =
1996 piu' 4=2000 (+) 48 * 19 = 912
Slide 22
22 rappresentazione di numeri per semplificare le operazioni di
addizione (e le altre operazioni aritmetiche) si ricorreva al
pallottoliere (abaco) il pallottoliere e' rimasto in uso in molti
paesi fino a pochi decenni fa (Russia, Cina, Giappone) dove il suo
uso era insegnato a scuola (talvolta lo e' ancora) il sistema
romano era una via poco praticabile e fu abbandonato anche se solo
dopo piu' di mille anni... tracce di uso rimangono in varie
situazioni e in vari paesi...
Slide 23
23 numeri indiani Il sistema posizionale decimale fu inventato
in India: duemila anni prima il sistema di numerazione posizionale
fu inventato dai sumeri e babilonesi, ma con base 60; gli indu'
ripresero il sistema posizionale, con base 10 (non noto se lo
ripresero dai babilonesi attraverso le prime culture proto-indu' di
Harappa e Mohendjo Daro, (culture distrutte dagli indo-europei) o
se lo reinventarono) Laplace scrive:
Slide 24
24 Laplace sul sistema indo-arabo Laplace: il sistema ingegnoso
di esprimere ogni numero possibile con l'uso di soli dieci simboli
(assegnando ad ogni simbolo un valore di posizione e un valore
assoluto) nasce in India. Oggi l' idea sembra tanto semplice che il
suo significato e la sua profonda importanza non sono piu'
apprezzati. Il sistema ha portato ad una tale semplificazione dei
calcoli da portare l'aritmetica tra le invenzioni piu' utili per
l'umanita'. Si comprende l'importanza di questa invenzione se si
considera che essa non fu alla portata dei matematici maggiori
dell'antichita' come Euclide, Archimede o Apollonio... (a difesa di
quelli si ricorda che gli interessi dei matematici dell' antichita'
era volto verso la geometria, meno verso i calcoli numerici)
Slide 25
25 Numeri Brahmi nota l'evoluzione del 2 da || e del 3 da |||
numeri indiani
Slide 26
26 numeri indiani Sulle origini dei numeri Brahmi (da cui
derivano i numeri Devanagari, i numeri arabi (piu'varianti) e
infine i numeri come oggi li usiamo) si sa poco; poco si sa anche
sulle cause che portarono all'invenzione del sistema posizionale;
gli studi numerologici in India furono motivati dall'astrologia e
dal fascino per i numeri grandi tipico della cultura dell'India (
racconto del 2 secolo d.c. sul dialogo tra Boddishatva e il suo
maestro di matematica su come si ottengono dei numeri molto grandi;
Boddishatva arriva ad un dato dell' ordine di grandezza di 10^450 !
)
Slide 27
27 numeri indo-arabi
Slide 28
28 numeri cinesi
Slide 29
29 numeri giapponesi
Slide 30
30 numeri... si potrebbe continuare l'elenco di sistemi di
numerazione, menzioniamo solo un esempio ancora, che e' circa
contemporaneo ai numeri Brahmi, ma di tutt'altra regione...
Slide 31
31 Numerazione Maya le culture del continente africano erano a
contatto con l'area mediterranea e dell'india; le culture del
continente australiano (condizioni climatiche diverse) non hanno
dato luogo a organizzazioni statali complesse che richiedessero
archivi e corrispondenza... le culture del continente americano
hanno avuto uno sviluppo separato nell'arco di 10.000 anni (seconda
ondata di popolazione del continente, attraverso la Siberia e
l'Alasca), e sono arrivate alla scrittura e ai sistemi di
numerazione con uno sviluppo autonomo; la maggior parte del sapere
delle culture del continente americano e' stata distrutta dai
colonizzatori spagnoli. segue un cenno al sistema di numerazione
Maya, sviluppato molti secoli prima dell'arrivo degli
spagnoli.
Slide 32
32 Numerazione Maya
Slide 33
33 Numerazione Maya proviamo scrivere 508: ricorda che la base
e' 20, quindi 508 va pensato e riscritto come: 8 unita' (=8
decimale) 5 ventine (=100 decimale) 1 ventina al quadrato (=20*20 =
400 decimale) quindi 508 10 = 158 20 che in Maya scriviamo....
Slide 34
34 numeri maya qualche esempio di numeri maya:
Slide 35
35 sullo zero L'introduzione del sistema posizionale porto'
alla scoperta dello zero; si noti che i sistemi "additivi" come
l'antico egiziano o il sistema romano non richiedono l'uso dello
zero: 2040 si scrive MMXL, 24 si scrive XXIV... in un sistema
posizionale lo zero e' importante: devo distinguere tra 24, 204,
240, 2004, 2040, 2400, 20004, 200400, 24000... quindi come codice
di "posizione vuota" lo zero appare assieme al sistema posizionale,
mentre il NUMERO ZERO appare secoli dopo, con la generalizzazione
delle regole di aritmetica di somma, prodotto, moltiplicazione e
divisione...
Slide 36
36 storia numeri indu' 200 d.c.: cifre Brahmi, 500: sistema
posizionale e introduzione della cifra zero (non come numero, ma
come marcatore di posizione vuota), 630: zero come numero: il
matematico Brahmagupta si occupa dell'uso dello zero nelle
operazioni aritmetiche: Br. scrive [[se z sta per zero, n per
negativo, p per positivo, nn per numero negativo, np per numero
positivo]] : addizione: la somma di z e di un nn e' n, la somma di
un np con z e' p, la somma di z con z e' z; sottrazione: un nn (o
np) sotratto dallo z e' p (o n), z sotratto da un np (o nn) e' p (o
n), z sotratto da z e' z; moltiplicazione:... np moltiplicato per z
e' z,..., divisione: z diviso un np o un nn e' zero, z diviso z e'
z, (!!) np o nn diviso zero e' una frazione con zero come
denominatore (tautologia !!) -> non riesce a risolvere il x/0...
1130 Bhaskara: un np diviso per z e' una frazione chiamata frazione
infinita, che e' tale che f.i.+n e' f.i., e f.i.-n e' f.i....
Slide 37
37 numeri cinesi il sistema di numerazione indu', posizionale
decimale, con lo zero, era ben sviluppato nel 800 d.c., e dall'
India si diffuse all'est - in Cina: i matematici Cinesi del 1200
descrivono il sistema posizionale decimale con l'uso della cifra e
anche del numero zero; e sempre dall'India si diffuse all'ovest,
nei paesi arabi, e quindi in Italia: Fibonacci, "Liber abaci" dove
usa anche il "segno" zero (ma non il numero zero) il numero zero
entro' nell'uso comune dei matematici Europei appena dopo il
rinascimento (1600);... Gli autori J.J. O'Connor, E.F.Robertson,
dell' articolo sullo zero, scrivono: ma lo zero e'ancora
problematico ;-) si consideri ad esempio la data del "millenio", 1
gennaio 2000, che era la fine di 1999 anni del nostro sistema di
contare gli anni, e non di 2000 anni... (vedi:
http://www-history.mcs.st-andrews.ac.uk/HistTopics/Zero.html)
Slide 38
38 numeri indo-arabo-europei: I numeri standardizzati con
l'introduzione della stampa (1500-1600):
Slide 39
39 rappresentazione di numeri CODICI NUMERICI POSIZIONALI Un
numero e' codificato (rappresentato) da una sequenza di simboli,
dove ogni simbolo ha un valore numerico definito dalla posizione
del simbolo nella sequenza: 1984 rappresenta un valore dato dalla
somma di 1 migliaia 9 centinaia 8 decine 4 unita' 1984 rappresenta
1000 * 1 + 100 * 9 + 10 * 8 + 1
Slide 40
40 rappresentazione di numeri CODICI NUMERICI POSIZIONALI Un
numero e' codificato (rappresentato) da una sequenza di simboli,
dove ogni simbolo ha un valore numerico definito dalla posizione
del simbolo nella sequenza. Es: codice numerico posizionale con 4
simboli (cifre) : a b c d (o qualunque altri 4 simboli) Ad ogni
simbolo si associa un valore numerico, ad es.: a =3, b = 2, c = 1,
d = 0, Una stringa di tali simboli e' un codice di un numero: ad
esempio abbac: abbac rappresenta un valore numerico dato da: n = a
* p1 + b * p2 + b * p3 + a * p4 + c * p5 dove p1, p2, p3, p4 e p5
sono valori numerici o "pesi" associati alle posizioni nella
stringa.
Slide 41
41 rappresentazione di numeri - un codice... strano : cont. es
4 simboli, a b c d a cui associamo i valori numerici a =3, b = 2, c
= 1, d = 0, una stringa di tali simboli: abbac rappresenta un
valore numerico ottenuto dai simboli (cifre) moltiplicando ogni
cifra per un peso diverso (i pesi sono convenzionali) e poi
sommando: n = r * p1 + t * p2 + r * p3 + r * p4 + s * p5 es. con i
pesi (NON usuali! - anzi, decisamente strani...) p1 = 222, p2 = 55,
p3 = 17, p4 = 6, p5 = 1 il codice abbdc ovvero 32201 con tale
sistema vale 3*222 + 2*55 + 2*17 + 0*6 + 1*1 = 666+110+34+0+1 = 811
(sistemi simili sonostati usati per le monete di antichi
paesi)
Slide 42
42 rappresentazione di numeri esempio: rappresentazione di
numeri con 4 cifre a,b,c,d (leggi: zero, uno, due, tre) ca
rappresenta il valore c * peso1 + a * peso0 bacabb rappresenta un
valore numerico ottenuto dai simboli (cifre) moltiplicando ogni
cifra per un peso diverso e poi sommando: scelta abituale: i pesi
associati alle posizioni sono convenzionali ma NON sono arbitrari:
sono le potenze di una costante detta base del sistema, in un
sistema a 4 cifre, base 4, si assume convenzionalmente peso0 = uno,
peso1 = quattro ca = c * peso1 + a * peso0 quindi ca = c * quattro
+ a * uno
Slide 43
43 rappresentazione di numeri nel sistema in base 4 o
"quaternario" abbiamo 4 cifre: a,b,c,d (leggi : zero, uno, due,
tre), la codifica abbac rappresenta un valore numerico ottenuto dai
simboli (cifre) moltiplicando ogni cifra per un peso diverso (i
pesi sono convenzionali) e poi sommando: n = a * p1 + b * p2 + b *
p3 + a * p4 + c * p5 per il nostro sistema, una scelta e': p5
(ultimo peso a destra)vale 1 (unita') cioe' 4 alla 0 p4 (penultimo
peso a destra) vale 10 (quartine) = 4 alla 1 p3 vale 100 (sedicine)
= 4 alla due, ecc ba (vale b*p4+a*p5 = una quartina,zero unita') bd
(vale b*p4+d*p5 = una quartina,tre unita') bac (vale b*p3 + a*p4 +
c*p5= una sedicina + zero quartine + due unita')
Slide 44
44 rappresentazione di numeri sistema "quaternario", base 4,
con 4 cifre: a(zero), b(uno), c(due), d(tre) scelta abituale: i
pesi associati alle posizioni sono le potenze di una costante detta
base del sistema, per il nostro sistema, con n=
a*p1+b*p2+b*p3+a*p4+c*p5 una scelta potrebbe essere p5 vale 1
(unita'); p4 vale 10 (quartine), p3 vale 100(sedicine) ecc; 0) a 1)
b 2) c 3) d i primi 20 numeri 4) ba 5) bb 6) bc 7) bd si scrivono
8) ca 9) cb 10) cc 11) cd cosi' (es. cinque cioe' 12) da 13) db 14)
dc 15) dd un 4 piu' un 1 si scrive 16)baa 17)bab 18)bac 19)bad bb,
12 cioe' tre 4 piu' 20)bba 21)bbb 22)bbc 23)bbd zero 1 si scrive
ca, ecc) ancora: bbd =b*sedicine+b*quartine+d*unita' = scritto in
decimale: 16+4+3 = 23
Slide 45
45 rappresentazione di numeri riscriviamo il sistema
quaternario, base 4, con 4 cifre: al posto di a, b, c, d scrivo 0 1
2 3 per il nostro sistema, una scelta dei pesi (abituale): p5 vale
1 (unita'); p4 vale 4 (quartine), p3 vale 16(sedicine) diremo il
sistema posizionale con base 4, e per contare in base 4 avremo: 0)
0 1) 1 2) 2 3) 3 i primi 20 numeri 4) 10 5) 11 6) 12 7) 13 si
scrivono 8) 20 9) 21 10) 22 11) 23 cosi'... 12) 30 13) 31 14) 32
15) 33 16)100 17)101 18)102 19)103 20)110 21)111 22)112 23)113 ad
es : 113 =1*sedicine+1*quartine+3*unita' = riscritto in base dieci
abituale: 113 = 16+4+3 = 23
Slide 46
46 rappresentazione di numeri il nostro sistema numerico e'
posizionale con base dieci: 1 1 8 7 rappresenta 1*10^3 +9*10^2
+8*10^1 +7*10^0 = 1*1000 +1*100 +8*10 +7* per un codice numerico
posizionale in base b uso un insieme di b cifre (simboli): {
s1,s2,s3,... sb } Un dato di n+1 cifre c(n) c(n-1) c(n-2)
c(n-3)...c(1) c(0) rappresenta il numero (indico con b^k = b
elevato alla k) c(n)*b^n + c(n-1)*b^(n-1) +... + c(1)*b^1 +
c(0)*b^0 cioe (in base b): c n * 10..00 +.. + c 2 * 100 + c 1 * 10
+ c 0 * 1
Slide 47
47 rappresentazione di numeri si noti che nel sistema numerico
posizionale con base dieci: 1 1 8 7 rappresenta 1*10^3 +9*10^2
+8*10^1 +7*10^0 = 1*1000 +1*100 +8*10 +7* 1 questo si puo' scrivere
anche cosi' (con basi a fattore comune) : ( ( ( ( ( 1*10 ) + 1 ) *
10 + 8 ) * 10 ) + 7 )
Slide 48
48 rappresentazione di numeri riprendiamo il sistema con 4
simboli (cifre), base = 4, e i pesi saranno le potenze di 4:
p4..p0= 256 64 16 4 1 e quindi d b d d c con (d =3, c = 2, b = 1, a
= 0) rappresenta: 3*p4 + 1*p3 + 3*p2 + 3*p1 + 2*p0 = 3 * 10000 + 1
* 1000 + 3 * 100 + 3 * 10 + 2 * 1 (in base 4) = 3*4^4 + 1*4^3 +
3*4^2 + 3*4^1 + 2*4^0 = (base 10) 3*256 + 1*64 +3*16 + 3*4 + 2*1 =
768 + 64 + 48 + 12 + 2 = 832 + 62 = 894 in base 10
Slide 49
49 rappresentazione di numeri I primi venti numeri sono
rappresentati in base 4 come segue (riportati numero in decimale e
in base quattro):0 111123 221230 10 2 4->100 2 8->1000 2
16->10000 2 32->10 0000 2 64->100 0000 2 128->1000 0000
2 256->1 0000 0000 2 ecc">
65 rappresentazione di numeri ricorda alcune potenze di due in
binario: 2 = 2 alla 1; 4= 2 alla 2; 8 = due alla 3; 16 = 2 alla 4;
32 = 2 alla 5; 64 = 2 alla 6; 128 = due alla 7; 256 = 2 alla 8; 512
= 2 alla 9; 1024 = 2 alla 10; 2048=2 alla 11; 4096=2 alla 12; 32768
= 2 alla 15; 65536 = 2 alla 16;... 1024 = 2 alla 10... = 1 Kilo 1
048 576 = 2 alla 20 = 1 Mega 1 073 741 824 = 2 alla 30 = 1 Giga...
e un Tera ? in base due scrivo le potenze di due come: 2 ->10 2
4->100 2 8->1000 2 16->10000 2 32->10 0000 2 64->100
0000 2 128->1000 0000 2 256->1 0000 0000 2 ecc
Slide 66
66 rappresentazione di numeri es. il numero 101101 2
rappresenta (tutto in binario): 1*100000 2 + 0*10000 2 + 1*1000 2 +
1*100 2 + 0 *10 2 + 1 2 ovvero (in decimale): 1* 32 10 + 0*16 10 +
1* 8 10 + 1 * 4 10 + 0 * 2 10 + 1 = 45 10
Slide 67
67 rappresentazione di numeri conversione da base 2 a base 10
-basta ricordare le potenze di due ed il significato del codice,
4096 2048 1024 512 256 12864 32168 2^122^112^10
2^92^82^72^62^52^42^3 42 1 ad es 10000 2 = 2 alla 4 = 16 2^22^1 2^0
per cui 10100 = 1*2^4 +0*2^3 +1*2^2 +0*2^1 +0*2^0 rappresenta 1*16
+0*8 +1*4 +0*2 +0*1 = 20
Slide 68
68 rappresentazione di numeri conversione da base 2 a base 10
-basta ricordare le potenze di due ed il significato del codice,
4096 2048 1024 512 256 1286432168 2^122^112^10
2^92^82^72^62^52^42^3 42 1 2^22^1 2^0 esercizio... convertire in
base dieci il numero dato in base due (qui inseriti tre spazi per
migliore lettura): 101 0110 0110 0101 2
Slide 69
69 rappresentazione di numeri soluzione esercizio " convertire
in base dieci il numero dato in base due " 101 0110 0110 0101 onm
lkji hgfe dcba ricordando i pesi che sono: 1 per lultima cifra a
destra, a, poi due per la penultima cifra b, poi 4 per c, poi 8 per
d, ecc, e 1024 per la decima cifra k, 2048 per l, 4096 per m(12a
cifra) 8192 (13.a cifra n), 16384 per la 14.a cifra o, quindi
(tolte le cifre zero, restano le cifre uno), in notazione mista: o
+ m + k + j + g + f + c + a 16384 +4096 +1024 +512 + 64 + 32 + 4 +
1 = 22117
Slide 70
70 rappresentazione di numeri soluzione esercizio " convertire
in base dieci il numero dato in base due " 101 0110 0110 0101 un
po' piu' veloce se raggruppo a 4 a 4 i bit, e ricordando i pesi di
questi gruppi, che sono le potenze di 16 (un gruppo di 4 cifre
binarie permette di contare da 0 a 15), 1 per lultimo a destra, 16
per il penultimo a destra, 256 per il terzultimo a destra (il
secondo) e infine 4096 per il primo quindi (in notazione mista):
101*4096 + 0110*256 + 0110*16 + 0101*1 ricordando la tabellina dei
primi 16 numeri in binario, 101 = 5, 0110 = 6, 0101 = 5, quindi:
5*4096 + 6*256 + 6*16 + 5 = 20480 + 1536 + 96 + 5 = 22117
Slide 71
71 esercizio (quiz) quale numero segue nella sequenza, e
perche' ? (ovvero: come e costruita questa sequenza?) 10 11 12 13
14 20 22 101 ?
Slide 72
72 quiz un aiuto... dieci in base dieci si scrive dieci piu'
zero, cioe' 10, dieci in base nove si scrive nove piu' 1, cioe' 11
dieci in base otto come si scrive?
Slide 73
73 rappresentazione di numeri - tabella di corrispondenza num\
base234567
----------------------------------------------------------------------------------------
uno111111 due1022222 tre11103333 quattro1001110444
cinque10112111055 sei110201211106 sette 1112113121110 otto
10002220131211 nove 10012321141312 dieci1010 101 22201413 nota: in
base 4 quattro scrivo 10, cinque scrivo 11 ecc nota la diagonale in
tabella in cor- rispondenza della riga = colonna = base, e le
diagonali immediatam. sopra e sotto...
Slide 74
74 rappresentazione di numeri aritmetica elementare, date
tabelle di addizione base 2 e 3 : 0 1 0 1 2 ---- ---------- 0 0 10
0 1 2 1 1 101 1 2 10 2 2 10 11 0+1=1 1+1=10 (binario) 1+1=2 2+1=10
(ternario) da cui le somme in base 2,3,10 (stessi dati in basi
diverse): 1 1 0 1 1 1 1 1 3 + 1 0 + 2 + 2 ------- ----- ----- 1 1 1
1 1 2 0 1 5 2 3 10
Slide 75
75 rappresentazione di numeri... ancora somme: nove piu' cinque
(decimale) in base 2 e 3: 1 0 0 1 1 0 0 9 1 0 1 1 2 5 ------- -----
-- 1 1 1 0 1 1 2 14 2 3 10
----------------------------------------------------------------------------------------------------
undici e cinque (decimale) in base 2 e 3: 1 0 1 1 1 0 2 11 1 0 1 1
2 5 ------- ----- -- 1 0 0 0 0 1 2 1 16 2 3 10 -
Slide 76
76 rappresentazione di numeri... ancora somme: quindici piu'
uno (decimale) in binario e ternario : 1 1 1 1 1 2 0 15 1 1 1
-------- ----- -- 1 0 0 0 0 1 2 1 16 2 3 10
80 rappresentazione di numeri base 3 [ 12*16=192 ] 1 1 0 * 1 2
1 ---------------- 1 1 0 2 2 0 1 1 0 ----------- 2 1 0 1 0 che e'
2*81+1*27+0*9+1*3+0*1 = =162+27+3 = 192 PRODOTTO: base 2 e 3: 0 1 0
1 2 --- ----------- 0 0 0 0 0 0 0 1 0 1 1 0 1 2 2 0 2 11 base 2
base tre 1*0=0 1*2 = 2 1*1=1 2*2 =11
Slide 81
81 esercizio: prodotto esercizio: calcolare 18 * 5 in base due
( 18 * 5 = 9 * 10 = 90 in base 10, in base 2: 90 = 64 + 16 + 8 + 2
= = 1*64 + 0*32 +1*16 +1*8 +0*4 +1*2 + 0*1 ovvero 1 0 1 1 0 1 0 con
i pesi 64 32 16 8 4 2 1 ) se passo prima in binario, e poi faccio
il prodotto in binario: 18 = 16 + 2 = (in base 2) = 10000 + 10 =
10010 5 = 4 + 1 = (in base 2) = 101
Slide 82
82 cont.esercizio prodotto continua esercizio: calcolare 18 * 5
in base due 18 = 16 + 2 = (in base 2) = 10000 + 10 = 10010 5 = 4 +
1 = (in base 2) = 101 quindi 1 0 0 1 0 x 1 0 1 ------------ 1 0 0 1
0 0 0 0 0 0 1 0 0 1 0 ---------------------- 1 0 1 1 0 1 0 = 64 +
16 + 8 + 2
84 esadecimale (base 16) In base 16 si usano 16 cifre,
normalmente indicate con: 01234567 89ABCDEF leggi: zero, uno,..
nove, dieci, undici, dodici,... quindici) I primi 20 numeri in base
16 sono(base10/base16): 1 2 3 4 5 6 7 8 9 10 base 10 1 2 3 4 5 6 7
8 9 A base 16 11 12 13 14 15 16 17 18 19 20 base 10 B C D E F 10 11
12 13 14 base 16 esercizi: 1) quanto vale C * D in base 16 ? 2)
costruire la tabella di moltiplicaz. per base 16.
Slide 85
85 CAMBIO DI RAPPRESENTAZIONE (rip.) per decodificare in base
10 un numero scritto in una base generica e' sufficiente ricordare
la definizione. Es: dato (in binario): 1 0 0 0 1 1 1 1 (cifre) 7 6
5 4 3 2 1 0 (rango) 128 64 32 16 8 4 2 1 (peso) = 1*2^7 + 0*2^6 +..
1^2^3 + 1*2^2 + 1*2^1 + 1*2^0 = = 1*128 + 0*64 +.. + 1*8 + 1*4 +
1*2 + 1*1 = 143 anche cosi': = ((( ((( 1*2+0)*2+0)*2+0)*2
+1)*2+1)*2+1)*2+1 dove il primo 1 viene moltiplicato per 2^7, il
secondo (zero) per 2^6 ecc
Slide 86
86 CAMBIO DI RAPPRESENTAZIONE - dal BINARIO-> Raggruppando
le cifre binarie (bit) a tre a tre, partendo da destra verso
sinistra, si converte la rappresentazione da base due a base otto:
il dato di partenza 143 (base 10) ovvero in base due 10 00 11 11
vale (cifre bin. a tre a tre): 010 001 111 (1*2+0) * 2^6 +
(0*4+0*2+1) * 2^3 + (1*4+1*2+1) * 2^0 = 2 * 64 + 1 * 8 + 7 * 1 = =
2 * 8^2 + 1 * 8^1 + 7 * 8^0 = 2 1 7 in base 8, che vale = 2 * 64 +
1 * 8 + 7 = 128 + 8 + 7 = 143 in base dieci
Slide 87
87 CAMBIO DI RAPPRESENTAZIONE - dal BINARIO-> per passare da
base due a base sedici e' sufficiente raggruppare i bit a quattro a
quattro: lo stesso dato 143 che in base due si scrive: 10 00 11 11
vale 1000 1111 (1*8+0*4+0*2+0) * 2^4 + (1*8+1*4+1*2+1*0) * 2^0 = 8
* 16 + 15 * 1 = = 8 F in base sedici = 8 * 16 + 15 = 128 + 15 = 143
in base 10 NOTA: lesadecimale si usa solo come rappresentazione piu
concisa del binario [ raggruppiamo il binario a 4 a 4 cifre
partendo da destra e abbiamo l esadecimale ].. il binario perche e
usato dal calcolatore...
Slide 88
88 CAMBIO DI RAPPRESENTAZIONE Ricordiamo ancora la tabella di
corrispondenza dei codici numerici da 1 a 15 nelle basi
(10)(16)(8)(2): 0 0 0 000 8 8 10 1000 1 1 1 001 9 9 11 1001 2 2 2
010 10 A 12 1010 3 3 3 011 11 B 13 1011 4 4 4 100 12 C 14 1100 5 5
5 101 13 D 15 1101 6 6 6 110 14 E 16 1110 7 7 7 111 15 F 17 1111
________________________________ il numero 10 (base 10) in base
otto si scrive 12, e in base 2 si scrive 1010; il numero 14 in base
8 e' 16 e in base 2 e' 1110...
Slide 89
89 RAPPRESENTAZIONE BIN... ultimi 4 esempi... - due es da base
2 a base 8 o 16: per passare da base 2 a base 8 prendo i bit a tre
a tre, da base 2 a base 16 prendo i bita a 4 a 4 (sempre da destra
verso sinistra): dato 10 00 11 11 = = 10 001 111 = 2 1 7 base 8
nota: il raggruppamento = 1000 1111 = 8 F base 16 inizia da destra
verso sin. dato 10 10 10 10 10 = = 1 010 101 010 = 1 2 5 2 base 8,
bit a tre a tre; = 10 1010 1010 = 2 A A base 16, bit a 4 a
quattro
Slide 90
90 RAPPRESENTAZIONE BIN... ultimi 4 esempi...... e due es. da
base 16 a base 8 (uso base 2): 7B5C dato in base 16 = = 0111 1011
0101 1100 cambio raggruppamento: = 0 111 101 101 011 100 = 0 7 5 5
3 4 (in base 8) 1991 dato in base 16 = = 0001 1001 1001 0001 cambio
raggruppamento: = 0 001 100 110 010 001 = 0 1 4 6 2 1 (in base
8)
Slide 91
91 CAMBIO DI RAPPRESENTAZIONE DA DECIMALE... procedimento per
passare da base 10 ad altra base: richiede un po' piu' lavoro, ma
e' ancora basato sulla definizione: L'ultima cifra di un codice
numerico posizionale in base b e' sempre il resto della divisione
per b [cio che resta dopo aver raggruppato gli oggetti a b a b"],
quindi: dato un numero in base 10 ad es. 152, l'ultima cifra "a"
della sua rappresentazione in base b,...fedcba, e' data da (13 MOD
5 = resto di 13 diviso 5 = 3 !!): n MOD b = 152 MOD b = (...fedcba)
MOD b = a ad es. se b=8 allora la cifra a = n MOD 8;
Slide 92 resto 0 -> "a" =0, 19 = 2 * 8 + 3 -> resto 3
-> "b" =3, 2 = 0 * 8 + 2 -> resto 2 -> "c" =2, 0 = 0 * 8 +
0 -> resto 0 -> "d" =0, a questo punto smetto, quindi 152 10
= 230 8">
92 CAMBIO DI RAPPRESENTAZIONE DA DECIMALE... (ripeto..) dato
numero n in base 10, l'ultima cifra "a" della sua rappresentazione
in base b,...fedcba, e' data dal resto della divisione di n per la
nuova base b: n MOD b = (...fedcba) MOD b = a per passare da
codifica da base 10 (es. 152) in base 8, calcolo le singole cifre
(dall'ultima in poi) dividendo ripetutamente (ad ogni passo prendo
come dividendo il quoziente del passo precedente) per la base nuova
(qui otto) e mi segno i resti (ottengo per prima l'ultima cifra)
152 = 19 * 8 + 0 -> resto 0 -> "a" =0, 19 = 2 * 8 + 3 ->
resto 3 -> "b" =3, 2 = 0 * 8 + 2 -> resto 2 -> "c" =2, 0 =
0 * 8 + 0 -> resto 0 -> "d" =0, a questo punto smetto, quindi
152 10 = 230 8
Slide 93 resto 2 -> "b"> resto 2 -> "b" = 2, 9 = 2 * 4
+ 1 -> resto 1 -> "c" = 1, 2 = 0 * 4 + 2 -> resto 2 ->
"d" = 2, 0 = 0 * 4 + 0 -> resto 0 -> "e" = 0, quindi 152 =
2120 10 4 verifica (da ottale in base 4, passando per il binario):
2 3 0 = 010 011 000 = 0 10 01 10 00 = 2120 8 2 2 4... ricordiamo
che era: 152 = 230 10 8"> resto 2 -> "b" title="93 CAMBIO DI
RAPPRESENTAZIONE DA DECIMALE... ancora, lo stesso dato in base 4:
152 = 38 * 4 + 0 -> resto 0 -> "a" = 0, 38 = 9 * 4 + 2 ->
resto 2 -> "b">
93 CAMBIO DI RAPPRESENTAZIONE DA DECIMALE... ancora, lo stesso
dato in base 4: 152 = 38 * 4 + 0 -> resto 0 -> "a" = 0, 38 =
9 * 4 + 2 -> resto 2 -> "b" = 2, 9 = 2 * 4 + 1 -> resto 1
-> "c" = 1, 2 = 0 * 4 + 2 -> resto 2 -> "d" = 2, 0 = 0 * 4
+ 0 -> resto 0 -> "e" = 0, quindi 152 = 2120 10 4 verifica
(da ottale in base 4, passando per il binario): 2 3 0 = 010 011 000
= 0 10 01 10 00 = 2120 8 2 2 4... ricordiamo che era: 152 = 230 10
8
115 conversione di base per frazioni 3) es.: trovare la
rappresentazione di 0,45 (dato in base 10) in base 8, ovvero
trovare le cifre a,b,c,d,e,f,g,... tali che 0,45 10 = 0,abcdefg...
8 Moltiplico per la base nuova ripetutamente ParteFratta 0,45*8
=3,6 = a,bcdefg-> a=3 0,6 *8 =4,8 = b,cdefg... b=4 0,8 *8 =6,4 =
c,defg... c=6 0,4 *8 =3,2 = d,efg... d=3 0,2 *8 =1,6 = e,fg... e=1
0,6 *8 =4,8 = f,g... f=4 0,8 *8 =6,4 = g,... g=6 la sequenza 4 6 3
1 si ripete, quindi: 0,45 (base 10) = 0,3 4631 4631 4631...
Slide 116
116 nota sul cambio di base Entrambi i procedimenti di
conversione (parte intera e parte fratta) sono basati sul fatto
che: dividere (o moltiplicare) per la base b significa spostare la
virgola (di base b) di una posizione a sinistra (o a destra) (come
ovvio in base 10); Esempi in binario: 11 x 10 = 110 (3 x 2 = 6) 101
x 10 = 1010 (5 x 2 = 10) 110 x 10 = 1100 (6 x 2 = 12) 111 x 10 =
1110 (7 x 2 = 14) 1110 : 10 = 111 (14 : 2 = 7) 1010 : 2 = 101 (10 :
2 = 5 ) 1000 : 10 = 100 (8 : 2 = 4) ecc
Slide 117
117 Note sul cambio base Come si scrive 0,1 (base dieci) in
base due? ovvero - se scrivo 1/10 in base due, lo scrivo in forma
di somma di termini 1/( 2^n ), con n=1,2,3,4, ovvero: 1/10 = a/2 +
b/4 + c/8 + d/16 + quanto valgono a, b, c, d ecc? vediamo
Slide 118
118 come si scrive 1/10 (decimale) in base due? 0,1 10 =
0,abcde... 2 dalla definizione, per la prime cifre della frazione:
1)moltiplico la equazione di sopra per due, e ottengo (ricorda:
moltiplicare per la base 2 significa spostare la virgola binaria di
una posizione a destra) 0,2 = a,bcde devono essere separatamente
uguali parte intera qui zero, e quindi a=0, e la parte fratta, e
quindi resta: 0,2 = 0,bcde 2) ripeto per la parte fratta residua:
moltiplico per due e ho: 0,4 = b,cde devono essere separatamente
uguali parte intera quindi b=0, e la parte fratta: 0,4 = 0,cde
Slide 119
119 0,1 10 = 0,abcde... 2 per la prime cinque cifre della
frazione: 1)moltiplico la equazione di sopra per due, e ottengo 0,2
= a,bcde separatamente uguali parte intera quindi a=0, e parte
fratta, e quindi resta 0,2 = 0,bcde 2) ripeto per la parte fratta
residua: moltiplico per due e ho: 0,4 = b,cde devono essere
separatamente uguali parte intera quindi b=0, e la parte fratta:
resta 0,4 = 0,cde 3) 0,4*2=0,8 c=0, resta 0,8 = 0,def.. 4)
0,8*2=1,6 d=1, resta 0,6 = 0,ef.. 5) 0,6*2=1,2 e=1, resta 0,2 =
0,f... quindi le prime cinque cifre sono abcde = 00011 0,1 10 = 0,a
bcde = 0,0 0011 2 rimane da calcolare 0,2 = 0,fghi che e' la stessa
situazione di 0,2 = a,bcde
Slide 120
120 quindi 1/10 (decimale) in base due con moltiplicazioni per
due ripetute: 0,1= 0,abcdefghi... 1) 0,1*2=0,2 a=0, resta 0,2=
0,bcdefghi 2) 0,2*2=0,4 b=0, resta 0,4= 0,cdefghi 3) 0,4*2=0,8 c=0,
resta 0,8= 0,defghi.. 4) 0,8*2=1,6 d=1, resta 0,6= 0,efghi... 5)
0,6*2=1,2 e=1, resta 0,2= 0,fghi... 6) 0,2*2=0,4 f=0, resta 0,4=
0,ghij... 7) 0,4*2=0,8 g=0, resta 0,8= 0,hijk... 8) 0,8*2=1,6 h=1,
resta 0,6= 0,ijkl... 9) 0,6*2=1,2 i=1, resta 0,2= 0,jklm... 0,1 10
=0,a bcde fghi jklm 0,1 10 =0,0 0011 0011 0011 2 la sequenza 0011
si ripete all'infinito (frazione periodica), e quindi 0,1 10 =0,0
0011 0011 0011 0011 0011 0011.. 2
Slide 121
121 come si scrive 1/10 (decimale) in base due? abbiamo visto
come si ricava 0,1 = 0,abcdefghi... 0,1 10 = 0,0 0011 0011 0011
0011 0011 0011 2 con 5 addendi (approssimazione di 1/10 con 5 bit):
0.1=1/10 (base10) = 0/2 + 0/4 + 0/8 + 1/16 + 1/32 + trascuto i
termini seguenti + 0/64+0/128 + 1/256 + 1/512 + 0/1024 + 0/2048 +
1/4096+.. e quindi 0/10 10 = 0,00011 2 (approssimazione a 5 cifre)
-> 0,00011 2 = 0,0625 + 0,03125 + 0,00390625 + 0,001953125 + +
0,00024414062 = 0,0998535... 10 che e' DIVERSO da 0,1 !
Slide 122
122 come si scrive 1/10 (decimale) in base due? passando da
base 10 a base 2 la frazione 0,1 (1/10 in base 10) diventa una
frazione periodica ovvero con infinite cifre, 0,1 10 = 0,0 0011
0011 0011 0011 0011 0011 2 0.1=1/10 (base10) = 1/16 + 1/32 + 1/256
+ 1/512 + 1/4096+.. e quindi con 12 cifre binarie della frazione (5
addendi) : 0,000110011001 = 0,0625 + 0,03125 + 0,00390625 +
0,001953125 + 0,00024414062 = 0,099853516... non e' 0,1 10 !.. e in
generale con un numero limitato (es.24 cifre binarie) ottengo una
rappresentazione APPROSSIMATA di 0,1 Si noti che 1/10 = 0,1 in base
10 NON e' rappresentabile esattamente in base due con un numero
finito di cifre, (si DEVE fare un troncamento -> in ogni caso ho
un errore !! )
Slide 123
123 frazioni Anche la trasformazione opposta, da base generica
in base dieci, si basa sulla definizione: es per base 2: dato
0,1011 in base due, 0,1011 = 1/2 + 0/4 + 1/8 + 1/16... in base 10,
quindi = 0,5 + 0,0 +0,125 + 0,0625 = = 0,6875 in base 10
Slide 124
124 frazioni base 16 - ogni cifra esadecimale usa 4 bit; il
numero di bit usati per le potenze di 16: nr.bit 1)10 16 = 16 10 =
16^1......... 4 2)100 16 = 256 10 = 16^2......... 8 3)1000 16 =
4096 10 = 16^3...... 12 4) 65 536 = 16^4........ 16 5) 1048
576,..... 20 (un mega) 6) 16 777 216,..... 24 7) 268 435 456,... 28
8) 4 294 967 296,... 32 (4 giga) per scrivere un valore di 4G devo
usare 32 bit (un indirizzo di 4G usa 32 bit; per indirizzi oltre 4G
devo usare piu' di 32 bit -> 64 bit; ritorneremo su questo in
HW
Slide 125
125 conversione di frazioni: da base 16 a base 10 es 0,5A51 16
(4 cifre esadecimali = 16 bit) = 5/16 10 + 10/256 10 + 5/4096 10 +
1/65536 10 = 0,3125 10 + 0,0390625 10 + 0,0012207031 10 +
0,000015258789.. 10 = 0,35278320312.. 10 ( se converto da base 16 a
base 10 un numero con k cifre (k limitato) - il numero di cifre del
risultato in base 10 e' finito o no? ;-)
Slide 126
126 frazioni quando si converte una frazione con un n umero di
cifre limitato da base generica a base dieci, il calcolo da fare e'
la somma di termini del tipo k / ( b n ) dove 1/(b n ) in genere
NON e' rappresentabile con un numero di cifre finito in base 10,
es. banale: 0,1 3 = 1/3 = 0,33333...
10..................................... MA per le basi 2,4,8,16,
ecc. il numero 1/x = (con x=b^n) = = 1/(b^n) ( con b = 2 oppure 4
oppure 8 ecc ) e' sempre rappresentabile esattamente con un numero
di cifre finito... basti pensare alla sequenza 0,5 0,25 0,125
0,0625 0,03125 ecc
Slide 127
127 frazioni nota: una frazione con un numero fisso di cifre in
binario si converte sempre in una frazione in decimale con un
numero di cifre limitato, perche' 1/(2 k ) ovvero , , 1/8, 1/16,
1/32 ecc hanno un numero di cifre decimali limitato: 1/2 0,51/512
0,001953125 1/4 0,251/1024 0,0009765625 1/8 0,1251/2048
0,00048828125 1/16 0,06251/4096 0,000244140625 1/32 0,031251/8192
0,0001220703125 1/64 0,0156251/16384 0,00006103515625 1/128
0,0078125 1/32768 0,000030517578125 1/256 0,00390625 1/65536
0,0000152587890625.... 1/2 n 0,00000000..abcd..gh25
Slide 128
128 limiti rappresentazione dei numeri NEL calcolatore: i
limiti dei formati standard (fissi)
Slide 129
129 rappresentazione di numeri nel calcolatore i codici per
rappresentare i numeri sono in generale fissi questo perche' le
celle di memoria centrale dove sono memorizzati i numeri (quando
usati da un programma) sono a formato fisso (ad es. 16 bit, 32 bit,
64 bit) e i circuiti che eseguono le operazioni aritmetiche (sia
per interi che per virgola mobile) sono a formato fisso; seguono
due pagine di richiamo di nozioni sulla memoria centrale e sull'
unita' centrale, che saranno trattate meglio in seguito...
Slide 130
130 rappresentazione di numeri memoria: insieme di celle ( o
voci ) numerate: ciascuna ha - un indirizzo (numero della cella)
(indirizzi da 0 a max, numeri da N bit, gli indirizzi oggi (2006)
arrivano oltre il Gbyte, sono numeri a 16 bit (anni 80) poi 32 bit
('90), oggi a 64 bit, che permette di contare oltre 10 18 (miliardo
di miliardi) !! e un contenuto = valore o codice del dato
memorizzato nella cella: K bit, dove K e' una potenza di 2: 8
(8bit=1byte), 16, 32, 64 bit: questo e' fisso per tutte le celle
del calcolatore; la circuiteria elettronica che gestisce la memoria
svolge la funzione di accesso alla memoria: leggi un dato ( di K
bit) dalla cella di memoria di indirizzo I (di N bit) scrivi un
dato ( di K bit) nella cella di memoria di indirizzo I (di N
bit)
Slide 131
131 rappresentazione di numeri l'UC esegue le istruzioni dei
programmi la parte dell'unita' centrale che esegue le operazioni
aritmetiche (+ - * /) e' detta unita'aritmetica, ed e' quasi sempre
sdoppiata in * unita' per aritmetica intera * unita' per aritmetica
in virgola mobile entrambe le unita' aritmetiche hanno i canali
(bus) di ingresso dati e di uscita dati (risultati) a formato
fisso, ad es. 32 oppure 64 bit (ma anche piu', 80 bit, 128 bit)
==>> i dati interi e in virgola mobile sono a formato fisso
(quasi sempre)
Slide 132
132 rappresentazione di numeri agli inizi sono stati usati
sistemi di codifica di numeri di tipo diverso : * per soddisfare le
esigenze di calcolo scientifico e * e per soddisfare le esigenze
delle applicazioni commerciali: per il calcolo scientifico furono
adottati due formati di codifica: numeri interi con segno, es.:
+06220716 numeri in virgola mobile con segno, es.: +3,1415927E-0
entrambi a formato fisso (es. sopra, otto cifre) i primi 15 anni
esistevano calcolatori con codifica di numeri a lunghezza variabile
e HW opportuno per trattarli; oggi esistono codifiche a lunghezza
variabile ma sono in generale gestite da software;
Slide 133
133 rappresentazione di numeri * per esigenze delle
applicazioni commerciali esistono linguaggi di programmazione e
sistemi software con codifica di numeri a lunghezza variabile, di
tre tipi: interi numero alberi (pini) davanti l'edificio C0
(Tutankamen): uno; numero anni galera per falso in bilancio: 0
numero esami di fondamenti di informatica 1 nel 2007: 91 numero
lingue ufficialmente riconosciute: 5000 numero testate atomiche
USA+Russia+Cina+GB+Francia+Israele al 2002: 10500 numeri con
virgola fissa es: indennit mensile (netto) di un senatore in Italia
+diaria+rimborsi: 12.138,30 euro deficit bilancia imp/exp al luglio
05 degli USA : 59 500 000 000, 00 $ numeri con virgola mobile
velocita' della luce : 299792,458 km/sec ("grande") massa
elettrone: 9.10938188 10 -31 kilo ("piccolo")
Slide 134
134 rappresentazione di numeri nel calcolatore i codici per
rappresentare i numeri sono in generale a formato fisso: il formato
fisso impone dei limiti ai codici utilizzabili e quindi all'
insieme di numeri rappresentabili l' insieme dei numeri
rappresentabili (interi e in virgola mobile) e' limitato i numeri
fuori dei limiti NON sono rappresentabili ! un'operazione
aritmetica che produce un valore fuori di questi limiti da'un
errore di overflow/traboccamen- to (il programma si blocca per
errore di aritmetica floating, rilevato HW "eccezione o
interrupt")
Slide 135
135 rappresentazione di numeri - casi particolari : talvolta e
richiesta una rappresentazione esatta dei numeri, qualunque sia il
loro valore es. bilancio di una ditta (pubblico o riservato) devo
rappresentare i dati esattamente... che sono appunto tipiche
applicazioni commerciali : per molte applicazioni di tale tipo la
rappresentazione dei numeri non e' a formato fisso, ma con sequenze
di cifre di lunghezza non fissa, delimitate con codici particolari
(es. Linguaggio di programmazione Cobol) alcuni calcoli
tecnico/scientifici particolari richiedono una numero di cifre
molto grande (illimitato in pratica): l'aritmetica in tal caso e'
gestita a livello SW.
Slide 136
136 rappresentazione di numeri altri esempi di dati di tipo
intero: *numero abitanti di Villalta di Porpetto, *numero abitanti
di Cheng-du (Cina), *paga operaio di 9 anni di una fabbrica Nike in
Marocco, *numero studenti del corso di fondam. di inform. del 1996,
*numero CD della biblioteca comunale del popolo di Udine,
*ammontare di una consulenza dell avvocato Schwindler, *patrimonio
complessivo di Bill Gates (in dollari), *numero dei granelli di
sabbia della riviera di Lignano,... vediamo ora " un altro tipo di
dati "...
Slide 137
137 rappresentazione di numeri in molti casi interessa di un
dato ** solo un certo numero di cifre di un dato tipicamente per
grandezze che hanno orgine da misure tecniche o scientifiche, ad
es. * distanza terra - luna, (precisione di 10 cifre) oppure *
diametro cilindro della moto Honda Goldwing (precisione di 4 cifre,
al 1/100 di mm) * quantita media di birra e di caffe (bevuta da un
tedesco medio) precisione di 2 cifre ** e lordine di grandezza...
in unita' di misura appropriate, come anni luce, chilometri,
millimetri, piedi, pollici, klaftre, galloni, barili, miglia
marine,
Slide 138
138 rappresentazione di numeri Per dati che hanno origine da
misure (direttamente o attraverso calcoli) viene usato il formato
in virgola mobile (*) che specifica le cifre e l'ordine di
grandezza con due interi separati: +3,14159265 E+00 dove i due
numeri interi hanno un formato fisso (k1 e k2 cifre, qui k1=9 cifre
e k2=2 cifre)
-------------------------------------------------------------------------------------------------------------
(*) formato in virgola fissa significa un intero che rappresenta
anche cifre decimali, ad es.: dati di 15 cifre: 00001 234 56 00000
rappresenta 1234, 56 00123 456 78 91230 rappresenta 123456,7891230
09999 999 00 00000 rappresenta 9999999 00000 000 00 23456
rappresenta 0,0023456 era usato nelle macchine calcolatrici
elettromeccaniche
Slide 139
139 tutte queste esigenze hanno risposte oggi standard
nellambito della rappresentazione di numeri allinterno del
calcolatore, e nei limiti di queste rappresentazioni. altri es
numero soci della Miracle.com 30.402.002,0 (unita') altezza del
tavolo 82,5 centimetri (valore approssimato a 3 cifre) lunghezza
delle coste marine italiane 9,532543E+3 chilometri (... falso, non
so il valore vero;-) valore di pi 3,14159265E+00 (approssimato a 8
cifre) per capire meglio cose un oggetto tipo numero per il
calcolatore, studieremo di seguito i vari sistemi di
rappresentazione di numeri. rappresentazione di numeri
Slide 140
140 rappresentazione di numeri tutti i dati / tutti i tipi di
informazione per il calcolatore si riducono sempre a codici
numerici; es.: le immagini fotografiche o televisive o del cinema
che tradizionalmente nascono "analogiche" (segnale continuo) e
vengono "usate" ancora analogiche si possono trasformare in dati
numerici (in formato digitale) analogamente i suoni (di vario
genere) si possono codificare numericamente (suono digitale) si
noti che la precisione (e quindi la qualita') ottenibile con metodi
analogici e' in generale minore rispetto la qualita' di segnali
codificati numericamente vedremo...
Slide 141
141 rappresentazione di numeri tutti i dati / tutti i tipi di
informazione per il calcolatore si riducono a codici numerici; es.:
gli attributi di un punto dell immagine sullo schermo (un elemento
dellimmagine = Picture Element = PIXEL) come intensita luminosa,
tonalita di colore, saturazione, oppure intensita dei colori
primari che lo compongono Rosso, Verde e Blu) sono rappresentabili
con valori numerici, un pixel si codifica con "un" numero (una
terna di num.) l'immagine sullo schermo e'un insieme di numeri
(quanti dipende dalla precisione immagine, va da 25 x 80 a 480 x
640 (VGA) a 1000 x 1600, 2000 x 3000 ecc...
Slide 142
142 limiti della codifica nel calcolatore in un calcolatore i
numeri sono codificati in binario con un numero fisso di bit (una
potenza di 2: 8, 16, 32, 64, 96) - e solo un numero limitato di
interi e' rappresentabile. Ad esempio, gli interi sono
rappresentati con (*) 8 bit, da 0 a 255 oppure da -128 a +127 (in
C: short int) (+) 16 bit da 0 a 65 535 oppure da -32 768 a 32 767
(in C: int) 32 bit, da 0 a 4 294 967 295 oppure da -2G a + 2G, (in
C: long int) 64 bit, long long int 80 bit... ecc
________________________________________________________________________________________________
(*) 4 bit: 0..15; 8 bit: 0..255; 10 bit: 0..1023; 12 bit:
0..4095,.. (+) int, short int = nomi di tipi di variabili nel
linguaggio di programmazione C
Slide 143
143 limiti della codifica nel calcolatore - esempio: con 4 bit,
sono rappresentabili 16 numeri senza segno: 00 00 =0 01 00 =4 10 00
=8 11 00=12 00 01 =1 01 01 =5 10 01 =9 11 01=13 00 10 =2 01 10 =6
10 10 =10 11 10=14 00 11 =3 01 11 =7 10 11 =11 11 11=15 e i numeri
da 16 in poi NON sono piu' rappresentabili. se uso sempre 4 bit,
un'operazione aritmetica puo' dare un risultato non rappresentabile
con tale formato: 1010 ovvero 10 + 111 +7 ---------- -------- 10001
17 il risultato esce dall' insieme dei numeri rappresentabili,
-> errore di troncamento o traboccamento = " overflow "
Slide 144
144 limiti della codifica nel calcolatore Analogamente (o
peggio) per le frazioni: ricordiamo solo il numero 1/10 10, cioe'
0,1 10 = 0,0 0011 0011 0011 0011 0011 0011... 2 0,1=1/10 (base10) =
1/16 + 1/32 + 1/256 + 1/512 + 1/4096+.. e quindi con 12 cifre
binarie dopo la virgola ( 5 addendi ) 0,0001 1001 1001 = 0,0625 +
0,03125 + 0,00390625 + + 0,001953125 + 0,00024414062 = 0,099853516
che e' diverso dal dato 0,1 !! con formato fisso di 8 bit la
rappresentazione di 0,1 diventa: 0,0001 1001 = 1/16 + 1/32 + 1/256
= 0,0625+ 0,03125+ 0,00390625 = 0,09765625 che e' (ovviamente)
anora peggio (piu' diverso da 0,1) !
Slide 145
145 rappresentazione di numeri con segno
Slide 146
146 RAPPRESENTAZIONE DI NUMERI CON SEGNO con 3 bit rappresento
8 oggetti diversi, (ad esempio con 3 bit posso contare fino a 7,
quindi rappresento otto numeri da 0 a 9); finora abbiamo visto la
codifica per numeri senza segno, ma posso rappresentare con gli
stessi codici anche numeri negativi, di solito si associa la meta'
dei codici ai numeri positivi, e meta' dei codici ai numeri
negativi: esempio con 2 bit ho: 00 = 0 01 = 1 10 = 2 11 = 3 oppure
00 = 0 01 = 1 10 = -1 11 = -1
Slide 147
147 RAPPRESENTAZIONE DI NUMERI CON SEGNO con 3 bit rappresento
8 oggetti diversi, (es.otto numeri); posso rappresentare con gli
stessi codici anche numeri negativi, (di solito meta' codici per
positivi, meta' per negativi), come in figura: 000 0 001 1 010 2
011 3 100 4 101 5 110 6 111 7 senza segno 000 -4 001 -3 010 -2 011
-1 100 0 101 1 110 2 111 3 con segno/a 000 0 001 1 010 -1 011 2 100
-2 101 3 110 -3 111 4 con segno/b 000 -1 001 -2 010 -3 011 -4 100 0
101 1 110 2 111 3 con segno/c... in quanti modi posso associare 8
simboli a 8 codifiche?
Slide 148
148... in quanti modi posso associare 8 simboli a 8 codifiche?
quante codifiche binarie diverse posso avere per 8 simboli ? dati 8
simboli ( a, b, c, d, e, f, g, h ), dati 8 codici binari a 3 bit,
es. ( 111 110 101 100 011 010 001 000 ) posso associare al primo
simbolo a uno qualunque dei 8 codici a 3 bit, ad es. a = 011 (A) (8
scelte possibili); al secondo simbolo posso associare uno qualunque
dei 7 codici rimasti, ad es. b = 110 (B) in totale per i primi due
simboli posso fare 8*7 scelte per le due codifiche: a, b, c, d, e,
f, g, h 111 110 101 100 011 010 001 000 (A) (B)
Slide 149
149... in quanti modi posso associare 8 simboli a 8 codifiche?
dati 8 simboli ( a, b, c, d, e, f, g, h ), dati 8 codici binari a 3
bit, ( 111 110 101 100 011 010 001 000 ) posso associare al primo
simbolo "a" uno qualunque dei 8 codici a 3 bit, ad es. a = 011 (8
scelte possibili); al secondo simbolo "b" posso associare uno
qualunque dei 7 codici rimasti, ad es. b = 110, (7 scelte); al
terzo simbolo "c" posso associare un codice dei 6 codici rimasti,
es. c= 000 (6 scelte) poi 5 scelte per il quarto, 4 scelte per il
quinto simbolo, in totale per 8 simboli posso fare 8*7*6*5*4*3*2*1
scelte; per 8 simboli con un codice a 3 bit posso fare 8 ! (8
fattoriale) scelte, cioe' 40320 scelte.
Slide 150
150 Codifica numeri interi con segno Dati 8 codici binari posso
scegliere 8! modi per usarli nella rappresentazione di 8 numeri
interi con segno, meta' positivi e meta' negativi (qui 5 dei 8! =
40320 possibili codici diversi ) codice num1 num2 num3 num4 num5 0
000 -3 -4 3 0 0 1 001 -2 -3 2 1 -0 2 010 -1 -2 1 2 1 3 011 -0 -1 0
3 -1 4 100 +1 0 -1 -3 2 5 101 +2 1 -2 -2 -3 6 110 +3 2 -3 -1 3 7
111 +4 3 -4 -0 -4
Slide 151
151 cont. RAPPRESENTAZIONE DI NUMERI CON SEGNO per
rappresentare numeri negativi con n bit (ad es. 4 bit), uso delle
regole convenzionali di rappresentazione; caso piu' semplice: un
bit per il segno, il resto rimane uguale; 2 possibilita:
rappresento segno meno con bit 1 o con bit 0: 000 0 +0 -0 001 1 +1
-1 010 2 +2 -2 011 3 +3 -3 100 4 -0 +0 101 5 -1 +1 110 6 -2 +2 111
7 -3 +3 RAPPRESENTAZIONE : GRANDEZZA CON UN BIT PER IL SEGNO questa
codifica non e usata ;-) (richiede una logica piu' complicata per
la realizzazione circuitale) vediamo ora le 3 codifiche piu usate
per i numeri con segno: complemento a uno, complemento a due, con
eccesso di 2^(k-1)
Slide 152
152 0 000 +0 1 001 +1 2 010 +2 3 011 +3 4 100 -3 5 101 -2 >
cod.di -2 = 1 01 dove il primo bit e il bit del segno, gli altri
codificano il num numeri con segno : il complemento a uno
RAPPRESENTAZIONE DI NUMERI CON SEGNO IN COMPLEMENTO A UNO QUI CON 3
BIT + 1 BIT SEGNO
Slide 153
153 numeri con segno : il complemento a uno in complemento a
uno la codifica di un numero negativo si ottiene scambiando uni e
zeri, rango per rango, ovvero facendo il complemento bit per bit:
il primo bit e il bit del segno, gli altri codificano il numero 0
000 +0 1 001 +1 2 010 +2 3 011 +3 4 100 -3 5 101 -2
159 numeri con segno : il complemento a uno aritmetica numeri
con segno, caso con 2 riporti al/dal segno: 3) caso di risultato
positivo 7 - 4 = 3 nota: codice di -4 = 0 1 1 1 7 2 4 -1 4 =
1111-0100 1 0 1 1 -4 Quindi (2 4 -1) + 7-4 = ------- -- 2 4 -1 + 3
= 1 0 0 1 0 2 2 4 + 2 => c'e' un riporto a sini- + 1 +1 stra,
dal bit del segno, ------- -- il riporto si somma a destra, 1 1 3
ultimo rango a destra, con la correzione otteniamo 1+2 = 3 nota che
c'e' un riporto anche NEL bit del segno: vi sono due riporti !
Slide 160
160 0 1 0 1 5 1 1 0 0 -3 ------- -- 1 0 0 0 1 +1 1 +1 --------
-- 1 0 2 SOMMA DI NUMERI IN COMPLEMENTO A UNO:se vi sono due
riporti, uno al bit del segno e uno dal bit del segno, il riporto
da sinistra (dal segno) si somma a destra numeri con segno : il
complemento a uno 3) ancora: caso di risultato positivo 5 - 3 =
2
Slide 161
161 se il risultato 0 1 0 0 4 e' negativo, e non 1 0 0 1 -6 vi
sono riporti ne' ------- -- nel bit del segno, 1 1 0 1 -2 ne' dal
bit del segno, allora otteniamo il risultato direttamente dalla
somma dei due codici numeri con segno : il complemento a uno 4)
caso di risultato negativo, senza riporti: 4-6=-2
Slide 162
162 5) caso di risultato negativo, due riporti: -1 -5 = -6 -1-5
= codici di 1 e 5 in complemento a uno: [(2 4 -1)-1]+[(2 4 -1)-5]=
1 1 1 0 -1 1 0 1 0 -5 [2 4 +(2 4 -1)-7 ] = ------- -- 1 1 0 0 0 -7
il riporto da sinistra +1 +1 si somma a destra --------- -- 1 0 0 1
-6
Slide 163
163 numeri con segno : il complemento a uno nella somma di due
numeri con segno codificati in complemento a uno si hanno le regole
seguenti (regole realizzate dai circuiti elettronici dell'unita'
aritmetica) * nessun riporto nel / dal bit del segno ok, niente da
aggiustare * due riporti (nel/dal bit del segno) ok, e il riporto
fuori del segno a sinistra si somma a destra (rango delle unita') e
se c'e' un solo riporto (dal bit del segno oppure nel bit del
segno) in tal caso il risultato NON e' corretto, c'e' un errore di
trabboccamento (overflow) vediamo questi casi di risultato
errato...
Slide 164
164 numeri con segno : il complemento a uno 7) caso di
overflow,dove il risultato NON erappresentabile(un solo riporto al
segno) 5 0 1 0 1 risultato si legge 5+6= -4 6 0 1 1 0 [[un solo
riporto verso il -- ------- bit segno -> errore di 11 1 0 1 1
traboccamento->overflow]] 8) caso di overflow -5 1 0 1 0 [[un
solo riporto dal bit -6 1 0 0 1 del segno -> errore --- --------
di overflow ]] -11 1 0 0 1 1 si ottiene: -5-6 = 3
Slide 165
165 numeri con segno, complemento a uno: riassumendo, la
codifica dei numeri con segno in complemento a uno (num.negativi
rappresentati dal codice dei numeri positivi complementando i bit
uno a uno) e' un codice consistente con le operazioni aritmetiche,
ed e' un codice simmetrico rispetto lo zero: +6 codice 0 110 -6
codice 1 001 due zeri: +0 0 000 -0 codice 1 000 limiti simmetrici,
per positivi e per negativi, da 0 a (2^(n-1)) -1, con n=4 bit il
limite e' (2^3-1) cioe': +7 0 111 -7 codice 1 111
Slide 166
166 numeri con segno, complemento a due: una codifica oggi piu'
usata: numeri con segno in complemento a due: e' simile alla
codifica in complemento a uno, ma con i codici spostati di una
posizione e con un solo codice per lo zero; la rappresentazione di
un numero negativo in complemento a due e data dal complemento bit
per bit, e poi sommando uno: +6 codice di +6 e' 0 110, -6 codice di
-6 e' 1 001 +1 = 1 010
Slide 167
167 numeri con segno, complemento a due: un primo esempio con 3
bit per il codice con segno (un bit per il segno, due bit per il
dato) codifica in compl.a uno | CODICE IN COMPLEM.A DUE: 0 000 +0 |
000 +0 1 001 +1 | 001 +1 2 010 +2 | 010 +2 cod.di -3 = 1 00 +1 = 1
01 = -3
Slide 168
168 RAPPRESENTAZIONE IN COMPLEMENTO A DUE rappresento -x in
complemento a due con (2 n - x ) (*) ad es: -5 e' rappresentato da
- (2 4 -5) = (10000 - 101) = ((10000 -1) +1 -101 ) = (1111 - 101
+1) = 1010 + 1 = 1011 un dato negativo in complemento a due si
rappresenta con il codice: { [complemento bit per bit del dato] +
uno }. -5 codice ( complemento a uno: +5 e' 0101 quindi 5 e' 1010 )
codice in complemento a due: 1010+1 = 1 011 _____ (*)ricorda codice
di x in complemento a uno (2 n -1)-x
Slide 169
169 RAPPRESENTAZIONE IN COMPLEMENTO A DUE complem. a due: -x e
rappresentato da 2 n -x = 100..00 - x -5 con 4 bit 2 4 -x = 10000 -
0101 = 1011 0 0 000 +0 | 1 111 -1 1 0 001 +1 | 1 110 -2 2 0 010 +2
| 1 101 -3 3 0 011 +3 | 1 100 -4 4 0 100 +4 | 1 011 -5 5 0 101 +5 |
1 010 -6 6 0 110 +6 | 1 001 -7 7 0 111 +7 | 1 000 -8 si noti: la
codifica non e simmetrica, i num. rappresentabili vanno da -8 a +7,
e c'e' una codifica dello zero!
Slide 170
170 RAPPRESENTAZIONE IN COMPLEMENTO A DUE ripetendo... caso
rappresentazione di numeri negativi in codifica complemento a due :
-x e rappresentato da 2 n -x i numeri rappresentabili con n bit
vanno da..a : -2 n-1... + 2 n-1 -1 (ad es. se n=4, da -8 a +7) si
noti che l' intervallo NON e' simmetrico! e che c'e' un unico
codice per lo zero.
Slide 171
171 RAPPRESENTAZIONE IN COMPLEMENTO A DUE complemento a due : x
= +10 codice 001 010, x = -10 codice? -x rappresentato da 2 n -x =
2 n -1 -x+1.. qui n=6, = 1000 000 - 1 001010 + 1 = 111111 001010 +
1 = compl.bit per bit + 1 = 110 110 con 6 bit si rappresentano i
numeri da -32 a +31: -2 n-1 = -2 5 = - 32 = 1 00000 +2 n-1 -1= 2 5
-1 = +31 = 0 11111 31 0 11111 -32 1 00000 30 0 11110 -31 1 00001 29
0 11101 -30 1 00010 28 0 11100 -29 1 00011... 17 0 10001 -18 1
01110 16 0 10000 -17 1 01111 15 0 01111 -16 1 10000... 10 0 01010
-10 1 10110... 2 0 00010 -3 1 11101 1 0 00001 -2 1 11110 0 0 00000
-1 1 11111 codice a 6 bit, 5 bit dato (numeri da 0 a 31), 1 bit
segno:
Slide 172
172 numeri negativi: codifica in complemento a due -3 1 1 0
1ovvero: (2^4-3)+2= 2^4-1 +2 0 0 1 0che rappresenta -1 --
-------... per definizione -1 1 1 1 1
------------------------------------------------------------------
-2 1 1 1 0 ovvero (2^4-2)+4 = 2^4+2, +4 0 1 0 0 ignoro il riporto a
sinist -- ------- che e dato da 2^4 +2 1 0 0 1 0 [[n.b.: due
riporti, uno dal e uno nel bit segno]]
------------------------------------------------------------------
-3 1 1 0 1 (2^4-3)+(2^4-2)=(2^4-5)+2^4 -2 1 1 1 0 il riporto (2^4)
ignorato- -- ------- [[n.b.: due riporti, uno -5 1 1 0 1 1 dal e
uno nel bit segno]] anche qui il risult. e' ok
Slide 173
173 numeri negativi: codifica in complemento a due quando il
risultato NON e rappresentabile: 5 0 1 0 1 6 0 1 1 0 [[un solo
riporto verso il -- ------- bit segno -> errore di 11 1 0 1 1
traboccamento->overflow]] -5 1 0 1 1 [[un solo riporto dal bit
-6 1 0 1 0 del segno -> errore --- -------- di overflow ]] -11 1
0 1 0 1
Slide 174
174 diversi modi di rappresentare numeri con segno: a b c d 0
000 = 0 (a = segno, b = cifre dato) 0 011 = 3 c = codifica senza
segno 0 100 = 4 d = codifica in complemento a uno 0 101 = 5 e =
codifica in comlemento a due 0 110 = 6 f = codifica in grandezza
con segno 0 111 = 7
177 rappresentaz. di numeri con segno con eccesso di k codifica
di numeri positivi e negativi con eccesso di 2 n-1 ogni dato x
(pos.o neg) e codificato con: 2 (n-1) + x (con n = numero bit della
rappresentaz.) ad es. per codificare 5 con n = 4 bit abbiamo: 5
-> 2 (n-1) + 5 = 2 3 + 5 = 1000 + 101 = 1101 per rappresentare
un numero negativo? -> uso laritmetica con complemento; devo
decidere quale rappresentazione uso per la sottrazione, cioe quale
codice per il -x; es: -5 -> 2 3 - 5 = 1000 + [codice di -5]
-> ora, se rappresento -5 in complemento a uno allora: 2^3 +
(-5) = 1000+1010 = 0010 (colonna d) (ignoro il riporto dal rango
del segno!)
Slide 178
178 codifica num.negativi con eccesso di k con n bit
rappresento x con 2 (n-1) + x con 4 bit ho i codici di +5 e di 5: 5
-> 2 (n-1) + 5 = 2 3 + 5 = 1000 + 101 = 1101 -5 -> 2 3 - 5 =
1000 + codice di -5 -> -5 codice con eccesso di 2 3, complem.a
uno: 2^3 + (-5)= 1000 + 1010 = 0010 (colonna d) -5 codice eccesso
di 2 3, in complem.a due: 2^3 + (-5)= 1000 + 1011 = 0011 (colonna
e) il primo bit e'sempre il segno del dato; con la codifica in
eccesso di k il segno meno corrisp. al bit segno = 0
Slide 179
179 riassumiamo la rappresentazione di numeri con segno - le 4
codifiche, caso di codice a 4 bit (1 bit per segno, 4 bit per dato)
Riassunto 4 codifiche numeri interi con segno
Slide 180
180 0 000 = 0 0 0 -7 -8 c= codifica senza 0 001 = 1 1 1 -6 -7
segno 0 010 = 2 2 2 -5 -6 d= codice in complem 0 011 = 3 3 3 -4 -5
a uno (due zeri!) 0 100 = 4 4 4 -3 -4 la piu' usata: 0 101 = 5 5 5
-2 -3 e= codifica in com- 0 110 = 6 6 6 -1 -2 plemento a due 0 111
= 7 7 7 -0 -1 (non simmetrica) 1 000 = 8 -7 -8 +0 +0 1 001 = 9 -6
-7 +1 +1 f= rappresentazione 1 010 = 10 -5 -6 +2 +2 in eccesso di 2
N-1 1 011 = 11 -4 -5 +3 +3 con compl. a uno 1 100 = 12 -3 -4 +4 +4
g= rappresentazione 1 101 = 13 -2 -3 +5 +5 in eccesso di 2 N-1, 1
110 = 14 -1 -2 +6 +6 con complem.a due 1 111 = 15 -0 -1 +7 +7
codifiche f,g hanno i a b c d e f g num.negat.con segno 0
Slide 181
181 esercizi aritmetica con segno: 1) 3-3 1) esercizio:
calcolare la somma : +3 -3 in due versioni, complemento a uno
complemento a due usare una codifica a 4 bit,
Slide 182
182 in complem. a uno: complem.bit per bit +3 -> 0 0 1 1 0 0
1 1 -3 -> 1 1 0 0 1 1 0 0 ---------- ottengo il codice di -0 1 1
1 1 (ricorda: il riporto da sinistra si somma a destra )
complemento a due: 30 0 1 1 compl.bit per bit e poi sommo 1 -31 1 0
1 (ignoro i due riporti --------------- nel/dal bit del segno) 1 0
0 0 0 esercizi aritmetica con segno: 1) 3-3, soluzione:
Slide 183
183 2) aritmetica con segno, compl. a 1,esercizi: 6-4, 5-6,
-2-3 es.2) calcolare in complemento a uno con codice a 4 bit: 6 -4
= 0 110 + 1 011 = 5 - 6 = 0 101 + 1 001 = -2 -3 = 1 101 + 1 100
=
Slide 184
184 2) aritmetica con segno, compl. a 1,esercizi: 6-4, 5-6,
-2-3 calcolare 6 - 4 (complemento a uno, codice a 4 bit) : codice
+6 0 110, codice +4 0 100, codice di -4 1 011, quindi : +6 0 110
somma : -4 1 011 ----- 10 001 risultato - ma vi sono due riporti
al/dal segno, si somma il riporto: 0 001 +1 ----- 0 010 ottengo il
codice di +2
Slide 185
185 2) aritmetica con segno, compl. a 1,esercizi: 6-4, 5-6,
-2-3 calcolare 5 - 6 (complemento a uno, codice a 4 bit): codice di
+5 0 101, codice di +6 0 110, di -6 1 001,quindi +5 0 101 somma :
-6 1 001 ----- -1 1 110 nessun riporto al/dal segno, ho
direttamente il risultato meno uno
Slide 186
186 2) aritmetica con segno, compl. a 1,esercizi: 6-4, 5-6,
-2-3 calcolare -2 -3 (complemento a uno, codice a 4 bit) codice di
+2 0 010, di -2 1 101 codice di +3 0 011, di -3 1 100, quindi -2 1
101 somma : -3 1 100 ----- 11 001 due riporti al/dal segno, sommo
il riporto: 1 001 +1 ----- 1 010 risultato codice di -5
Slide 187
187 3) aritmetica con segno, compl. a 2, esercizi: 6-4, 5-6,
-2-3 3) stessi esercizi, ma in complemento a due; 6 -4 5 - 6 -2 -3
ricorda per avere il codice di -3 in complemento a 2 si fa: parto
dal codice di +3, 0 011, il complemento a uno e 1 100, a questo poi
sommo uno, e ottengo 1 101 che e' il codice di -3 in complemento a
due; (vale anche per lo zero: per avere il codice di -0 si fa: +0 =
0 000, complemento a 1 e' 1 111, 1111 piu' 1 -> ottengo 0 000
)
Slide 188
188 3) aritmetica con segno, compl. a 2, esercizi: 6-4, 5-6,
-2-3 6 -4 codice di +6 0 110 codice di +4 0 100, -4: 1011 + 1 = 1
100 somma: +6 0 110 -4 1 100 ----- +2 10 010 risultato 0 010 (il
doppio riporto in e dal bit del segno e' ignorato)
Slide 189
189 3) aritmetica con segno, compl. a 2, esercizi: 6-4, 5-6,
-2-3 5 - 6 codice di 5 0 101 codice +6 0 110, di -6: 1 001+1=1010
somma: +5 0 101 -6 1 010 --------- -1 1 111 (nota:1=0001,complem. a
1 di -1 e' 1110,poi +1, ottengo 1111) -2 -3 codice di 2 0 010, -2:
1101+1= 1 110 codice di 3 0 011, -3: 1100+1= 1 101 somma: -2 1 110
-3 1 101 --------- -5 11 011 ignoro doppio riporto 1, (5=0101,
-5=1010+1 =1011=risultato sopra)
Slide 190
190 4) aritmetica con segno, codici a 5 bit di -2, -6, -7, -13
4) esercizio: calcolare le codifiche dei numeri: -2, -7, -9, -13 in
complemento a due, con rappresentazione di 5 bit (1 bit segno, 4
bit dato)
Slide 191
191 4) aritmetica con segno, codici a 5 bit di -2, -6, -7, -13
4) esercizio: calcolare le codifiche dei numeri: -2, -7, -9, -13 in
complemento a due, con rappresentazione di 5 bit (1 bit segno, 4
bit dato) codice di +2 = 0 0010 codice di -2 = 1 1101 + 1 = 1 1110
codice di +7 = 0 0111, codice di -7 = 1 1000 + 1 = 1 1001 codice di
+9 = 0 1001, codice di -9 da 1 0110 + 1 = 1 0111, codice di +13 = 0
1101, codice di -13 = 1 0010 + 1 = 1 0011,
Slide 192
192 FINE CODIFICHE NUMERI NEGATIVI
Slide 193
193 floating point = float, real, (*) numeri in virgola mobile
- numeri molto... grandi numeri molto... piccoli esempio: velocita'
della luce: 299 792 km/sec ("grande") massa elettrone: 9,109 381 10
-31 kilo ("piccolo")
----------------------------------------------------------------------------------------------------------------------------
(*) corrisponde ad un tipo standard di molti linguaggi di
programmazione
Slide 194
194 codifica in virgola mobile RAPPRESENTAZIONE DI NUMERI MOLTO
PICCOLI E MOLTO GRANDI --- IN VIRGOLA MOBILE (FLOATING POINT)
Possiamo scrivere un dato con parte intera e fratta in molti modi
diversi: 3,14159265 = 0,314159265 * 10 1 = 3,14159265 * 10 0 =
314159265 * 10 -8 = 0,0000314159265 * 10 5 = ( 314159265, -8 ) ecc
= 0,314159265 * E+1 j allora n*10 k +(m*10 (-k+j) )*10 k = (n +
(m*10 (-k+j) ) * 10 k 0,23E 3 + 0,55E 6 = 0,23*(10 -3 )*E6 + 0,55E
6 = 0,00023E 6 + 0,55 E 6 metto il fattore E 6 = 10 alla 6 in
comune: ( 0,00023 + 0,55 ) E 6 = ( 0,55023) E 6 = 0,55023 E 6
(*)ricorda: 0,23E 3 = 0,023E 4 = 0,00023E 6 = 2,3E 2 = 230 E 0
Slide 201
201 somma di due numeri in floating point ora sappiamo come
sommare due dati a 7 cifre: 1,000000 + 1,000000 E-7 1) porto i due
esponenti allo stesso valore, scelgo quello piu' grande: 1,000000 =
1,000000E+00 1,000000 E-7 = +0,000 000 1000000 E+00 2) poi
sommo:
Slide 202
202 codifica in virgola mobile porto i due esponenti allo
stesso valore, quello piu' grande: 1,000000 = 1,000000E+00 1,000000
E-7 = +0,000 000 100000 E+00 1,000 000 0 E+00 +0,000 000 1000 000
E+00 -------- ---------------- 0,100 000 1000 000 E+00 devo avere
il formato fisso a 7 cifre: tronco le ultime cifre, rimane 0,100
000 1 : il valore ottenuto 0,1000001E+00 e' diverso da 1,0E+00,
quindi vale appunto che 1.0 + x 1.0 ==>> vediamo ora con un x
piu' piccolo della precisione
Slide 203
203 codifica in virgola mobile Quanto vale (1+x), se x e' piu'
piccolo della precisione? 1 e' codificato con: 0,100 000 0 E+01
sommo un x < 1.0E-7, ad es. 4.0E-8: 4,000 000 E-08 per sommare,
devo avere esponenti uguali, uso il piu'grande: 0,100 000 0 E+01
+0,000 000 04 E+01 (e' 4,0E-08 spostato di 8 posiz.
----------------- per avere lo stesso esponente) 0,100 000 04
E+01
Slide 204
204 codifica in virgola mobile calcolo (1+x), con x e' piu'
piccolo della precisione: 1 e' codificato con: 0,100 000 0 E+01 un
x < 1.0E-7, ad es. 4.0E-8: 4,000 000 E-08 per sommare, devo
avere esponenti uguali, uso il piu'grande: 0,100 000 0 E+01 tutti i
dati con 7 cifre; +0,000 000 04 E+01 (e' 4,0E-08 spostato di 8
posiz. ----------------- per avere lo stesso esponente) 0,100 000
04 E+01 risultato con otto cifre per il dato - ma il formato e'
fisso: il risultato deve avere 7 cifre! l'ultima cifra viene
troncata (arrotondata) e si ottiene: 0,100 000 0 E+01 e quindi
ottengo il risultato uguale al primo addendo !!
Slide 205
205 codifica in virgola mobile, - limiti In virgola mobile
posso rappresentare numeri molto piccoli o molto grandi utilizzando
sempre lo stesso numero di cifre in un formato fisso; vediamo qui
un esempio di formato e i limiti che ne derivano: in tutto 6 cifre,
quattro per il dato, 2 per esponente, piu' i due segni
(dato,esponente) : 27,53-> 0,2753 E+02 0,000 000 000 07986->
0,7986 E-10 piccolo 12340000 0000 0000-> 0,1234 E+16 grande
codifico ora i numeri con il formato detto; i tre dati di sopra
codificati diventano : | + | + | 02 | 2753 | primo dato 27,53 | + |
- | 10 | 7986 | 2.o dato 0,7986 E-10 | + | + | 16 | 1234 | 3.o dato
0,1234E+16
Slide 206
206 27,53 0,2753 E+02 0,000 000 000 07986 0,7986 E-10 12340000
0000 0000 0,1234 E+16 4 cifre per il dato,2 cifre per l'esponente |
+ | + | 02 | 2753 | primo dato 27,53 | + | - | 10 | 7986 | 2.o dato
0,7986E-10 | + | + | 16 | 1234 | 3.o dato 0,1234E+16 il numero piu'
grande rappresentabile con tale formato: | + | + | 99 | 9999 |=
0,9999 * 10^99 il numero piu' piccolo rappresentabile con tale
formato, con 4 cifre, normalizzato (prima cifra a sin. e' non
zero): | + | - | 99 | 1000 |= 0,1000 * 10^(-99) il piu' piccolo con
1 cifra sola (non normalizzato) : | + | - | 99 | 0001 |= 0,0001 *
10^(-99) = 0,1 * 10^(-102) limiti codifica in virgola mobile
Slide 207
207 codifica in virgola mobile nota - la rappresentazione di un
numero in floating point definisce come si codificano * la parte
delle cifre (mantissa) e * la parte che da' l'ordine di grandezza
(caratteristica) 123,456 si scrivera': 0,123456 E+3 (convenzione:
la prima cifra dopo la virgola decimale e' non nulla, la parte
intera e' nulla; usata negli es.seguenti) oppure (convenzione
standard corrente, piu' usata) 1,23456 E+3 la virgola sta dopo la
prima cifra non nulla (che in binario e' sempre 1, e si assume
implicitamente senza memorizzarla)
Slide 208
208 codifica in virgola mobile - codifica e limiti seguono
esempi in binario su un ipotetico formato a 8 bit: S Z EE DDDD
segno datosegno esponespondato 1) Per rappresentare il dato 5,0
avremo in binario : 5 = 101,0 * 2^0 (ora normalizzo ) = 0,1010 * 2
^ 3 => 0 0111010 SZEEDDDD quindi 00111010 e la codifica di 0,101
* 2 ^ 3 2) per rappresentare il dato 0,75 avremo in binario: 0,75 =
0,5 + 0,25 = 1/2+1/4 = 0,11 con esponente 0, quindi 00001100 quindi
00001100 rappresenta 0,11 * 2 ^ 0
Slide 209
209 codifica in virgola mobile es 0,125 contin. virgola mobile
con codifica a 8 bit SZEEDDDD (S segno dato, Z segno esponente, EE
esponente, DDDD cifre dato) 3) dato 0,125 = 1/8 = 0,001 = 0,001*2^0
= { S=0, Z=0, EE=00, DDD=001 } poi normalizzo, cioe virgola binaria
a sinistra della 1.a cifra del dato : = 0,1*2^(-2)(*) codifico
l'esponente negativo ad es.in compl. a uno, quindi (z=meno,EE=2) -2
diventa: -2= 111- 010 =101, infine il tutto 0,1000*2^(-2) diventa:
0,125 = S E EE DDDD= 0 1 01 1000= 01011000 _____________ (*) nota:
di seguito uso a^b oppure a b per indicare a alla b
Slide 210
210 codifica in virgola mobile es con soli 8 bit... cont.
codifica in virgola mobile con 8 bit S segno, Z segno espon,EE
espon., DDDD dato abbiamo visto che 0011 1010 rappresenta 5,0 e che
0,125=1/8=0,001 2 si scrive 01011000, vediamo i numeri piupiccolo e
piugrande: il piu'grande: esponente posit.massimo e'3: 0011 1111 =
0,1111*2 3 = 8 ( circa) il piu'piccolo: espon.piu'piccolo e'-3:
0100 0001 = 0,0001*2 -3 = 1,0*2 -7 = 1/128
Slide 211
211 vedremo tra poco lo standard di codifica per i due tipi
piu' usati, FLOATING (32 bit) e DOUBLE (64 bit) e i limiti che
derivano da tale formato
Slide 212
212 codifica in virgola mobile es con soli 8 bit... i dati con
segno meno sono rappresentati complementando tutto, quindi ad es.
gli stessi di prima: +5,0 = 0011 1010, -5,0 = 1100 0101 0,75 = 0000
1100, -0,75 = 1111 0011 0,125 = 0101 1000, -0,125 = 1010 0111
Slide 213
213 nota sulla interpretazione di un dato quando il calcolatore
preleva un dato dalla memoria il dato sara' poi interpretato a
seconda dello stato in cui si trova l'unita' centrale: senza questa
informazione la codifica di dato qualunque, ad es.: 1011 1111 non
dice nulla su come deve essere interpretato: per interpretare un
insieme di n bit correttamente dobbiamo sapere a priori di che tipo
di dato si tratta!! ad es. il dato qui riportato, 1011 1111, avra'
un valore ben diverso a seconda se lo interpreto come il codice di
un carattere, oppure come codice d intero con segno oppure come
codice di un numero in floating point, oppure ancora come il codice
di un'istruzione macchina!!
Slide 214
214 il formato determina * la precisione dei dati * i limiti di
rappresentazione dei dati vediamo un esempio semplificato (tutto in
base 10)
Slide 215
215 codifica in virgola mobile: precisione/estensione date n
cifre [es. 10 cifre decimali] per rappresentare un dato in virgola
mobile dobbiamo decidere il formato cioe dividere le cifre
disponibili per le codifiche dei vari pezzi... il formato determina
l'insieme dei numeri rappresentabili: * sia per l' estensione
dell'intervallo (ordine di grandezza, num. piu' piccolo/ num. piu'
grande) * sia per la precisione (cifre significative) nota: se uso
piu' cifre per l'esponente -> posso rappresentare numeri piu'
grandi / piccoli, -> ma - diminuisce la precisione (restano meno
cifre per il dato) e viceversa: uso piu cifre per dato -> meno
cifre per esp.
Slide 216
216 codifica in virgola mobile: base 1000 Possiamo aumentare i
limiti di grandezza dei numeri rappresentabili a pari numero cifre
della codifica cioe' senza aumentare il num.di cifre del codice...
es: codice con 6 cifre decimali, 2 espon, 4 dato, tutto in base 10
0,50 = 0,50*10^00 => + +00 5000 3,14 =
3,14*10^00=0,314*10^1=> + +01 3141 0,00123=,123*10^-2 => +
-02 1230 il numero piu' piccolo + -99 1000 => 0,1000E-99 il
numero piu' grande + +99 9999 => 0,9999E+99 NOTA: qui l'
esponente e' con base 10 MA se cambio base ?
Slide 217
217 codifica in virgola mobile: base 1000 riprendiamo il codice
detto, con 6 cifre decimali di cui 2 per l' espon, 4 per le cifre
del dato, tutto in base 10,.. MA: cambio base dellesponente: invece
di 10 e 1000 allora: 0,50=0,50 *1000^0 => + +00 5000 il numero
piu' piccolo e' ora: + -99 1000 = 0,1000*(1000^(-99)) = =
0,1000*((1000)^(-99)) =0,1000*10^(-297) = 0,1000 E -297 il numero
piu' grande e' ora: + +99 9999 = 0,9999*(1000^(-99)) = =
0,9999*((10^3)^(99)) => 0,9999 E+297 aumentano i limiti di
ordine di grandezza !!
Slide 218
218 codifica in virgola mobile: base 1000 codice con 6 cifre
decimali, 2 espon, 4 dato, tutto in base 10 cambio base
dellesponente: invece di 10 e 1000 allora: 0,50=0,50 *1000^0,
codice: + +00 5000 il numero piu' piccolo + -99 1000 = 0,1000 E-297
il numero piu' grande + +99 9999 = 0,9999 E+297 aumentano i limiti
di ordine di grandezza... MA ->perdo cifre, cioe' precisione:
3,14 =3,14 *1000^0 = se cambio espon.di uno la virgola si sposta di
TRE posizioni (base esponente e' 1000): = 0,00314*1000^1 => +
+01 0031 0,00123 =,00123*1000^0 => + +00 0012
Slide 219
219 codifica in virgola mobile: base 10 vs. base 1000 codifica
con 6 cifre decimali, 2 espon, 4 dato, tutto in base 10, base
dellesponente 10: 3,14 = 3,14*10^00=0,314*10^1=> + +01 3141 se
la base dellesponente invece di 10 e 1000 allora abbiamo:
3,14=3,14*1000^0=,00314*1000^1=>+ +01 0031 quindi: se aumento o
diminuisco di 1 l esponente con base 1000 devo spostare le cifre
del dato di 3 posizioni: avro spesso zeri dopo la virgola decimale
normalizzata -> meno cifre utilizzate -> perdo in precisione
in media perdo 1,5 cifre
Slide 220
220 ancora un ese. con mantissa a 3 cifre, esponente a base 10:
93,93 *10^0 =0,9393*10^2 => + +02 939 9,393 *10^0 =0,9393*10^1
=> + +01 939 0,9393 *10^0 =0,9393*10^0 => + +00 939
0,09393*10^0 =0,9393*10^-1 => + -01 939,009393*10^0
=0,9393*10^-2 => + -02 939,0009393*10^0=0,9393*10^-3 => + -03
939 se la base dellesponente invece di 10 e 1000 allora abbiamo:
93,93 *1000^0 =,09393*1000^1 => + +01 094 9,393 *1000^0
=,009393*1000^1=> + +01 009 0,9393 *1000^0 =,9393*1000^0 => +
+00 939 0,09393*1000^0 =,09393*1000^0 => + +00 094,009393*1000^0
=,009393*1000^0=> + +00 009,0009393*1000^0=,9393*1000^-1 => +
-01 939 codifica in virgola mobile
Slide 221
221 se la base dellesponente e 1000 (invece di 10) allora
abbiamo (ripeto): 93,93 *1000^0 =,09393*1000^1 => + +01 094
9,393 *1000^0 =,009393*1000^1=> + +01 009 0,9393 *1000^0
=,9393*1000^0 => + +00 939 0,09393*1000^0 =,09393*1000^0 => +
+00 094,009393*1000^0 =,009393*1000^0=> + +00
009,0009393*1000^0=,9393*1000^-1 => + -01 939 perdo cifre
significative (in media perdo 1,5 cifre=meta cifre della base) ma
guadagno in limiti di grandezza: 1000^ (-99) -- 1000^ 99 ( invece
di 10^ (-99) -- 10^ 99 ) ovvero 10^ (-99*3) -- 1000^ (99*3)
codifica in virgola mobile
Slide 222
222 ancora ese. con mantissa a 3 cifre, esponente a base 10:
45678 = 0,45678*10^+5 => + +05 457 0,00712 = 0,712 *10^-2 =>
+ -02 712 0,5555 = 0,5555 *10^-0 => + +00 555 se la base
dellesponente invece di 10 e 1000 allora abbiamo: 45678,0 =
0,045678*1000^2 => + +02 045
224 esercizio floating point continua esercizio: convertire
7,7E0 in binario, in formato da 12 bit: 1 bit segno dato; cifre del
dato: 7 bit esponente: 1 bit segno, 3 bit valore (eccesso 2^3,
compl. a 1); devo convertire le cifre del dato e l'esponente; qui
l'esponente e' zero, quindi devo convertire solo le cifre:
convertire 7,7 da base 10 a base 2: devo convertire separatamente
la parte intera, semplice: 7-> 111, (sono i tre bit iniziali
delle cifre del dato) e separatamente la parte fratta: solo per
quattro bit, perche' con mantissa a 7 bit, 3 bit gia'dati, devo
trovare ancora 4 bit 0,7 = 0,abcd (binario) - moltiplicando per due
ripetutamente: 1) 0,7*2->1,4; 2)0,4*2->0,8; 3)0,8*2->1,6;
4) 0,6*2->1,2; 5) 0,2*2->0,4; quindi per la parte fratta le
cifre binarie sono 0,10110 (e' un 0,7 approssimato con 5 bit,
0,5+0,125+0,0625=0, 6875) il dato in binario e' 111,10110
normalizzo: 1,1110110 * 2^2
Slide 225
225 esercizio floating point: 7,7E0 in binario, continua 1)
convertire 7,7E+0 da base 10 a base 2: (1 bit segno dato; 7 bit
cifre del dato; esponente: 1 bit segno, 3 bit valore (eccesso di
2^3, compl.a 1); parte intera 7-> 111, poi la parte fratta - con
mantissa a 7 bit, devo trovare ancora 4 bit: 1) 0,7*2->1,4;
2)0,4*2->0,8; 3)0,8*2->1,6; 4) 0,6*2->1,2; 5)
0,2*2->0,4; quindi per la parte fratta le cifre binarie sono
0,10110 (e' un 0,7 approssimato con 5 bit, 0,5+0,125+0,0625=0,
6875) ora il dato in binario e' 111,10110; normalizzo: 1,1110110 *
2^2 quindi: parte cifre 1,1110110, -> sono 8 bit ?!... MA: il
primo bit poi sara' implicito, quindi restano 7 bit da memorizzare
la parte esponente 2 cioe' 010, con eccesso di 1000: 1000+010=1010
metto insieme e ho: 0 1 010 1110110 = 6,875 E+0 la precisione e'
veramente scarsa... visto le poche cifre per il dato ;-)
Slide 226
226 somma in virgola mobile somma con numeri in virgola mobile:
0,xxx*10^E1 + 0,yyy*10^E2 = 1) se E1 = E2 allora le due mantisse si
possono sommare: (0,xxx + 0,yyy) *10^E1 es.: 0,314 E + 1 + 0,250E +
1 = ( 0,314 + 0,250 ) * 10 ^ 1 = = 0,564 * 10^1 = = 0,564 E +
1
Slide 227
227 somma in virgola mobile Per sommare due numeri in virgola
mobile, se E1 E2 allora devo rendere i due esponenti uguali: porto
l'esponente piu' piccolo al valore del piu' grande, es: formato con
3 cifre per dato, 1 per esponente: 0,222E+1 + 0,333E-1 -> e1e2
per cui non posso sommare direttamente -> devo aggiustare uno
dei due esponenti, cambio l'esponente piu' piccolo e lo metto al
valore del piu' grande, scalando di uguale misura la mantissa:
0,222E+1 + 0,00333E+1 = 0,222 * 10 + 0,00333 * 10 = (0,222 +
0,00333) * 10 = 0,22533 E+1 abbiamo di nuovo un errore troncamento
! ancora un es.: 0,997E+1 + 0,00423E+1 = 0,997 * 10 + 0,00423 * 10
= (0,997 + 0,00423) * 10 = 1,00123E+1 = 0,100123E+2 = 0,100E+2
Slide 229
229 somma in virgola mobile Per sommare due numeri in virgola
mobile: se e1 e2 allora devo rendere i due esponenti uguali:
abbiamo visto la somma fatta portando l'esponente piu' piccolo al
valore del piu' grande... e se invece porto l esponente piu grande
al valore del piu piccolo? -> 0,997E+1 + 0,423E-1 = 99,7E-1 +
0,423E-1 non cambia molto... ma ottengo un numero in forma non
normalizzata, devo in ogni caso normalizzare => alla fine ho lo
stesso risultato...... non si usa
Slide 230
230 codifica in virgola mobile : overflow puo succedere che il
risultato della somma non sia rappresentabile: dati: 0,9983E+99 e
0,7044E+98, rappresentati ad es. formato decimale, 2 cifre per
esponente, 4 per dato: +99,9983 = 99,9983 +98,7044 = 99,07044
--------------------------------------- sommiamo: 991,06874 ->
normalizzo - 100,106874 -> lesponente e > 99 non posso
rappresentare l'esponente 100 -> il risultato esce dai limiti
della codifica ! ==> errore di traboccamento ==>
overflow
Slide 231
231 codifica in virgola mobile: overflow se l'esponente del
risultato di unoperazione aritmetica non e' rappresentabile allora
ce un errore di overflow: // caso di formato decimale, con 2 cifre
per esponente e 4 per dato: +99 9983 = 99,9983 +98 7044 = 99,07044
------------ ---------- 99 1,06874 -> normalizzo - 100,106874
-> esponente e >99 non posso rappresentare l'esponente 100 !
// nei calcolatori c'e' spesso un meccanismo di controllo
automatico su questo errore: se ceun "floating point overflow"
allora il calcolatore interrompe (HW!) l' esecuzione del programma
e segnala questo fatto in qualche modo.
Slide 232
232 formato / i floating point in molti modelli di calcolatori
sono state usati per la codifica floating diversi formati e basi
diverse dalla base due: ad esempio con base 16, (e quindi - come
vedremo - l'intervallo di numeri rappresentabili era maggiore) dal
1985 si usa lo standard IEEE 754 (che vedremo tra poco) che usa
come base per l'esponente il valore 2
Slide 233
233 standard IEEE FORMATI STANDARD IN VIRGOLA MOBILE (IEEE
standard 754 Binary Floating Point Arith del 1985) s 1,ddd...ddd E
z ee..ee = (segno dato s) * [mantissa 1,dddddd] * parte Esponente
[= segno z esponente * caratteristica = cifre esponente eeee ]
formato a 32 bit, mantissa dd...dd a 23 bit, esp. zee...ee a 8 bit
formato a 64 bit, formato a 80 bit,
Slide 234
234 standard IEEE 754 del 1985 formato a 32 bit (single
precision) limiti: max 3.4 E+38 min 1.5 E-45 non normalizzato
positivo min 1.2 E-38 normalizzato positivo mantissa: 23 bit con
sottinteso un uno davanti alla virgola binaria, quindi sono 24 bit,
precisione di 7,4 cifre decimali il dato e' sempre espresso in modo
che la mantissa e' compresa tra 1.000..00 e 1.111..11 (dato
normalizzato) esponente binario codice a 8 bit da -126 a +127, con
base 2 e rappresentazione in eccesso di 127 in complem. a due;
formato bit (virgola a dest.della 1.a cifra D) S ZEEEEEEE D,DDD
DDDD DDDD DDDD DDDD DDDD D non e' memorizzato, e' implicito
Slide 235
235 es. il dato 42.6875 si codifica come segue: 42.6875 =
101010.1011 = 1.010101011 x 2 5 che per l'esponente da': 127+5
=132=128+4= 10000100 (8 bit) e per la mantissa
1,01010101100000000000000 (23 bit) e per il segno 0 (1 bit) totale:
0 10000100 01010101100000000000000 esempio di codifica float
Slide 236
236 limite float - numero piu' grande Nota: il numero piu'
grande per un numero in virgola mobile a 32 bit in formato standard
e' esponente (8 bit