La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

1 SISTEMI DI RAPPRESENTAZIONE DI NUMERI. 2 rappresentazione di numeri contenuto: rappresentazione di numeri in basi diverse rappresentazione binaria,

Presentazioni simili


Presentazione sul tema: "1 SISTEMI DI RAPPRESENTAZIONE DI NUMERI. 2 rappresentazione di numeri contenuto: rappresentazione di numeri in basi diverse rappresentazione binaria,"— Transcript della presentazione:

1 1 SISTEMI DI RAPPRESENTAZIONE DI NUMERI

2 2 rappresentazione di numeri contenuto: rappresentazione di numeri in basi diverse rappresentazione binaria, rappresentazione di numeri con segno, rappresentazione di numeri molto grandi e molto piccoli aritmetica floating-point

3 3 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. 32 bit o 64 bit) e i circuiti che eseguono le operazioni aritmetiche (sia per interi che per virgola mobile) sono a formato fisso;

4 4 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 arrivano al Gbyte, sono numeri a 32 bit, limite che sta aumentando) e un contenuto = valore o codice del dato memorizzato nella cella: K bit, dove K e' una potenza di 2, ad es 8, 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)

5 5 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 hanno i canali 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

6 6 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 i due formati di codifica: numeri interi con segno numeri in virgola mobile con segno +3, E-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 software;

7 7 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 pini davanti il Tutankamen: 2 numero anni galera per falso in bilancio: 0 numero esami di fondamenti di informatica 1 all'anno: 120 numero lingue ufficialmente riconosciute: 5000 quantita' testate atomiche XXX al 2002: numeri con virgola fissa es: indennità mensile (netto) senatore + diaria+rimborsi: ,30 euro deficit bilancia imp/exp al luglio 05 di XXX : ,0 $ numeri con virgola mobile velocita' della luce : ,458 km/sec massa elettrone: × kilo

8 8 rappresentazione di numeri nel calcolatore i codici per rappresentare i numeri sono in generale a formato fisso: il formato fisso impone dei limiti ai possibili codici e quindi ai possibili numeri l' insieme dei numeri standard (interi e virgola mobile) rappresentabili e' limitato i numeri fuori dei limiti NON sono rappresentabili ! se un risultato produce un valore fuori di questi limiti si ha un errore HW (eccezione o interrupt)

9 9 rappresentazione di numeri 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) particolari calcoli richiedono precisione molto spinta (praticamente illimitata): in genere, gestita SW.

10 10 rappresentazione di numeri altri esempi di dati di tipo intero: *numero studenti del corso di fond. di inform. del 1996 *numero CD della biblioteca comunale del popolo, *paga di ragazzo di 9 anni di una fabbrica Nike in Marocco, *ammontare di una consulenza dellavvocato Sgaioccich, *patrimonio complessivo di Bill Gates,

11 11 rappresentazione di numeri spesso interessa ** 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 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,

12 12 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, 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: rappresenta 1234, rappresenta , rappresenta rappresenta 0, molto usato nelle macchine calcolatrici elettromeccaniche

13 13 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 (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, E+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

14 14 rappresentazione di numeri tutti i dati / tutti i tipi di informazione per il calcolatore si riducono a codici numerici; es.: le immagini fotografiche o televisive o del cinema che tradizionalmente nascono "analogiche" (segnale continuo) 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

15 15 rappresentazione di numeri dispositivi convertitori : ADC analog to digital / DAC digital to analog nota in figura la perdita di informazione nel passaggio A->D

16 16 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...

17 17 rappresentazione di numeri un esempio di immagine resa con risoluzione variabile: qui, 640x480 pixel (VGA) con 16M di colori (24 bit per pixel)

18 18 rappresentazione di numeri riduciamo la risoluzione da 72 pix/pollice per un fattore 4, abbiamo un'immagine a 160x120 pixel (VGA) con 16M di colori (24 bit per pixel)

19 19 rappresentazione di numeri riduciamo la risoluzione da 72 pix/pollice per un fattore 10, abbiamo un'immagine a 64x48 pixel (VGA) con 16M di colori (24 bit per pixel)

20 20 rappresentazione di numeri riduciamo la risoluzione da 72 pix/pollice per un fattore 20, abbiamo un'immagine a 32x24 pixel (VGA) con 16M di colori (24 bit per pixel)

21 21 rappresentazione di numeri se invece riduco il numero di bit per pixel, cioe' il numero di colori rappre- sentabili, l'immagine cambia come in esempio: qui con 16M colori (24 bit per pixel) e 640x480 pixel;

22 22 rappresentazione di numeri qui con 256 colori (8 bit per pixel) - la differenza quasi non si vede

23 23 rappresentazione di numeri qui con 16 colori (4 bit per pixel)

24 24 rappresentazione di numeri qui con 4 colori (2 bit per pixel)

25 25 rappresentazione di numeri qui con 2 colori ovvero bianco/nero (1 bit per pixel), - ma: con i toni grigi resi con griglie di punti piu'o meno densi (dithering)

26 26 rappresentazione di numeri analogamente per il suono: un suono puo' essere rappresentato da una sequenza di valori numerici che rappresentano l'intensita' del suono in ogni istante: la " fedelta' " della rappresentazione di un suono e' data da: il numero di bit per un valore generico ad ogni istante (da 8 a 16 e oltre) - precisione di ogni "campione" il numero di valori per secondo (da 10 a 40 mila) per poter ricostruire fedelmente un segnale nel tempo deve essere la frequenza di campionamento almeno il doppio della frequenza massima del segnale

27 27 rappresentazione di numeri passiamo ora alla codifica dei numeri

28 28 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 !!

29 29 rappresentazione di numeri unario: per codificare n uso un solo simbolo ripetuto n volte: uno IseiIII III dueI IsetteIIII III treI I IottoIIII IIII 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

30 30 rappresentazione di numeri per semplificare la rappresentazione di numeri circa 5000 anni fa in Egitto, Mesopotamia, poi Cina, piu tardi - circa 3000 anni fa - 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. Il numero zero fu introdotto dai babilonesi circa 600 anni prima di Cristo e poi ripreso in India e poi dagli arabi (800 d.c.,, prima "universita'" araba) da qui in Spagna (1000 d.c.), poi in Italia (1100) ecc.

31 31 rappresentazione di numeri Dai sistemi di rappresentazione babilonesi / egiziani / fenici / greci deriva il sistema di numerazione romano (ibrido) Il sistema latino e' un codice non posizionale: il valore numerico associato ad un simbolo dipende in minima parte dalla sua posizione ed e' in gran parte fisso: 1I6 VI11XI 2 II7 VII12XII 3 III8 VIII13XIII 4 IV9 IX14XIV 5 V10X15XV 20XX 30XXX 40XL 50L e, ancora, ->

32 32 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....

33 33 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 (+) ________ (*) piu' 4 = 1996 piu' 4=2000 (+) 48 * 19 = 912

34 34 rappresentazione di numeri per semplificare le operazioni di addizione (e le altre operazioni aritmetiche) si ricorreva al pallottoliere; 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)

35 35 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 * * * 8 + 1

36 36 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 della stringa.

37 37 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 = 200, p2 = 50, p3 = 17, p4 = 5, p5 = 71 il codice abbac vale 3* *50 + 2*17 + 3*5 + 1*71 =... ( sistema assolutamente inusuale... ;-)

38 38 rappresentazione di numeri esempio: rappresentazione di numeri con 4 cifre: a,b,c,d (leggi: zero, uno, due, tre) bacabb rappresenta un valore numerico ottenuto dai simboli (cifre) moltiplicando ogni cifra per un peso diverso (i pesi sono convenzionali) e poi sommando: ca rappresenta il valore c * peso1 + a * peso0 scelta abituale: i pesi associati alle posizioni sono le potenze di una costante detta base del sistema, in un sistema a 4 cifre si assume convenzionalmente peso0 = uno, peso1 = quattro ca = c * peso1 + a * peso0 quindi ca = c * quattro + a * uno

39 39 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')

40 40 rappresentazione di numeri sistema "quaternario" 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, 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'... 12) da 13) db 14) dc 15) dd 16)baa 17)bab 18)bac 19)bad 20)bba 21)bbb 22)bbc 23)bbd ad es : bbd =b*sedicine+b*quartine+d*unita'

41 41 rappresentazione di numeri riscriviamo il sistema quaternario con 4 cifre: al posto di a, b, c, d scrivo 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 = = 23

42 42 rappresentazione di numeri Il sistema piu' usato e il sistema numerico posizionale con base dieci: rappresenta 1*10^3 +9*10^2 +8*10^1 +7*10^0 = 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 * c 2 * c 1 * 10 + c 0 * 1

43 43 rappresentazione di numeri si noti che nel sistema numerico posizionale con base dieci: rappresenta 1*10^3 +9*10^2 +8*10^1 +7*10^0 = 1* *100 +8*10 +7* 1 si puo' scrivere anche cosi': ( ( ( ( ( 1*10 ) + 1 ) * ) * 10 ) + 7 )

44 44 rappresentazione di numeri per un sistema con 4 simboli (cifre) sara' base = 4, e i pesi saranno le potenze di 4: p4..p0= 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 * * * * * 1 (in base 4) = 3*4^4 + 1*4^3 + 3*4^2 + 3*4^1 + 2*4^0 = (base 10) 3* *64 +3*16 + 3*4 + 2*1 = = = 894 in base 10

45 45 rappresentazione di numeri I primi venti numeri sono rappresentati in base 4 come segue (riportati numero in decimale e in base quattro): < < <- (non 40!) < <-

46 46 rappresentazione di numeri es: 1323 rappresenta (e' la codifica di) : 1 * base^3 + 3 * base^2 + 2 * base ^1 + 3 * base^0 1 * 4*4*4 + 3 * 4*4 + 2 * * 1 ovvero: 1* * * …. e 1987 cosa rappresenta in base 4 ? <<== ;-)

47 47 rappresentazione di numeri... in base quattro il numero non rappresenta nulla perche' 9,8,7 non sono cifre in base quattro - in base b le cifre vanno da 0 a b-1 !! in ogni caso la base si scrive 10 e rappresenta il numero b (tranne in unario) Es. in ottale ovvero con base otto le cifre sono: e la base otto si scrive 10 !!

48 48 rappresentazione di numeri nota che in ottale (base otto) il valore numerico della base e' otto, che in base 8 si scrive 10 in genere in un sistema posizionale con base b, b si scrive 10 otto in base 8 si scrive 10, e si indica con: 10 8 mentre si indica 8 in base 10 con: 8 10 quindi 10 8 = 8 10

49 49 rappresentazione di numeri in ottale (base otto) si conta: a cui segue -> 10(*) (*) 10 8 = > 7*8+7 = > =79....

50 50 rappresentazione di numeri ad es. in base 12 ho dodici cifre, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B dieci e undici in base 12 sono cifre, indicate con A e B ! quindi i primi 36 numeri - conto da 0 a 35 (35 in base 10): A B (B vale 11) A 1B (1B vale 23) A 2B (2A vale 34) A 3B (39 vale 45) A 4B (4B vale 4*12+B=48+11) 60...

51 51 rappresentazione di numeri CONVERSIONE da base b generica a base 10, esempio: da base 8 a base 10, per definizione: 17 = 1*8+7 =15, 20 = 2*8 = 16, 76 = 7*8+6 = 62, 100 = 1*64 = 64 ecc Per decodificare in base 10 un numero rappresentato in base 8 basta ricordare la definizione: ad es ( in base 8) vale in base 10: 5* *10 + 5*1 (in base 8) 5 * * 8 + 5*1 (in base 10) = = 333 (in base 10)

52 52 rappresentazione di numeri ancora un es: il numero in base 8 diventa in base 10: 3 * * * * 1 tutto in base 8, che in base 10 diventa: = 3* * * * 1 = =

53 53 rappresentazione di numeri un es. in base 3... (cifre 0,1,2 ): ricorda come si conta in base tre: … che corrispondono ai numeri in base 10: … quanto vale (dato in base 3) = in base dieci ?

54 54 rappresentazione di numeri quanto vale (dato in base 3) = in base dieci ? ricorda come si conta in base tre: che sono i numeri in base = in base tre il significato e' noto: 1 * * * * * * 1 che diventa in base dieci: 1 * * * * * 3 + 1* 1 = = =

55 55 rappresentazione di numeri In base due abbiamo due cifre 0 1 (cifre binarie,BInary digiT = BIT) per rappresentare i due numeri zero e uno, e 10 per rappresentare il numero due; i primi 20 numeri in binario: nota: 101 = 4 +1=5; 110 = 4+2=6; 1101 = 8+4+1=13 ecc

56 56 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 = 1 Kilo = 2 alla 20 = 1 Mega = 2 alla 30 = 1 Giga in base due scrivo: 2 -> > > > > > > > ecc

57 57 rappresentazione di numeri es. il numero rappresenta (tutto in binario): 1* * * * * ovvero (in decimale): 1* * * * * = 45 10

58 58 rappresentazione di numeri conversione da base 2 a base 10 -basta ricordare le potenze di due ed il significato del codice, ^122^112^10 2^92^82^72^62^52^42^ ad es = 2 alla 4 = 16 2^22^1 2^0 per cui = 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 esercizio... convertire in base dieci il numero dato in base due (qui inseriti tre spazi per migliore lettura):

59 59 rappresentazione di numeri soluzione esercizio convertire in base dieci il numero dato in base due (qui inseriti tre spazi per migliore lettura): ottengo (raggruppando a 4 a 4 i bit, e ricordando i pesi di questi gruppi, che sono: 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 (un gruppo = 4 cifre binarie), quindi (in notazione mista): 101* * * *1 ricordando la tabellina dei primi 16 numeri in binario, 101 = 5, 0110 = 6, 0101 = 5, quindi: 5* * * = = 22117

60 60 esercizio (quiz) quale numero segue nella sequenza, e perche' ? (ovvero: come e costruita questa sequenza?) ?

61 61 rappresentazione di numeri - tabella di corrispondenza num\base uno due tre quattro cinque sei sette otto nove dieci 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...

62 62 rappresentazione di numeri aritmetica elementare, date tabelle di addizione base 2 e 3 : =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):

63 63 rappresentazione di numeri... ancora somme: nove piu' cinque (decimale) in base 2 e 3: undici e cinque (decimale):

64 64 rappresentazione di numeri... ancora somme: quindici piu' uno (decimale) in binario e ternario :

65 65 rappresentazione di numeri addizione in base otto da cui ad es. 7+1= ottale / decimale

66 66 rappresentazione di numeri PRODOTTO: base 2 e 3: base 2 base tre 1*0=0 1*2 = 2 1*1=1 2*2 =11

67 67 rappresentazione di numeri es. (12*13=156) in base due: * in base 10: = 156 PRODOTTO:base 2 e 3:

68 68 rappresentazione di numeri base 3 [ 12*16=192 ] * che e' 2*81+1*27+0*9+1*3+0*1 = = = 192 PRODOTTO: base 2 e 3: base 2 base tre 1*0=0 1*2 = 2 1*1=1 2*2 =11

69 69 esercizio: prodotto esercizio: calcolare 18 * 5 in base due ( 18 * 5 = 9 * 10 = 90 in base 10, in base 2: 90 = = = 1*64 + 0*32 +1*16 +1*8 +0*4 +1*2 + 0*1 ovvero con i pesi ) se passo prima in binario, e poi faccio il prodotto in binario: 18 = = (in base 2) = = = = (in base 2) = 101

70 70 cont.esercizio prodotto continua esercizio: calcolare 18 * 5 in base due 18 = = (in base 2) = = = = (in base 2) = 101 quindi x =

71 71 rappresentazione di numeri tavola delle moltiplicazioni in base otto: PRODOTTO: 2*4=10,3*5= ========================== 1 4 * (base 8) (o) (o) nb: 4*5 8 =24 8 ho 4 8, riporto 2 8,poi 1*5 8 =5+2(rip)=7.. (in base 10: 12 * 13 =

72 72 esadecimale (base 16) In base 16 si usano 16 cifre, normalmente indicate con: ABCDEF leggi: zero, uno,.. nove, dieci, undici, dodici,... quindici) I primi 20 numeri in base 16 sono(base10/base16): base A base base 10 B C D E F base 16 esercizi: 1) quanto vale C * D in base 16 ? 2) costruire la tabella di moltiplicaz. per base 16.

73 73 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): (cifre) (rango) (peso) = 1*2^7 + 0*2^ ^2^3 + 1*2^2 + 1*2^1 + 1*2^0 = = 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

74 74 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 vale (cifre bin. a tre a tre): (1*2+0) * 2^6 + (0*4+0*2+1) * 2^3 + (1*4+1*2+1) * 2^0 = 2 * * * 1 = = 2 * 8^2 + 1 * 8^1 + 7 * 8^0 = in base 8, che vale = 2 * * = = 143 in base dieci

75 75 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: vale (1*8+0*4+0*2+0) * 2^4 + (1*8+1*4+1*2+1*0) * 2^0 = 8 * * 1 = = 8 F in base sedici = 8 * = = 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...

76 76 CAMBIO DI RAPPRESENTAZIONE Ricordiamo ancora la tabella di corrispondenza dei codici numerici da 1 a 15 nelle basi (10)(16)(8)(2): A B C D E F ________________________________ 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'

77 77 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 = = = base 8 nota: il raggruppamento = = 8 F base 16 inizia da destra verso sin. dato = = = base 8, bit a tre a tre; = = 2 A A base 16, bit a 4 a quattro

78 78 RAPPRESENTAZIONE BIN... ultimi 4 esempi e due es. da base 16 a base 8 (uso base 2): 7B5C dato in base 16 = = cambio raggruppamento: = = (in base 8) 1991 dato in base 16 = = cambio raggruppamento: = = (in base 8)

79 79 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;

80 80 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 * > resto 0 -> "a" =0, 19 = 2 * > resto 3 -> "b" =3, 2 = 0 * > resto 2 -> "c" =2, 0 = 0 * > resto 0 -> "d" =0, a questo punto smetto, quindi = 230 8

81 81 CAMBIO DI RAPPRESENTAZIONE DA DECIMALE... ancora, lo stesso dato in base 4: 152 = 38 * > resto 0 -> "a" = 0, 38 = 9 * > resto 2 -> "b" = 2, 9 = 2 * > resto 1 -> "c" = 1, 2 = 0 * > resto 2 -> "d" = 2, 0 = 0 * > resto 0 -> "e" = 0, quindi 152 = verifica (da ottale in base 4, passando per il binario): = = = ricordiamo che era: 152 =

82 82 esercizi: calcolare in base 2 <<< quanto fa in base 4 ? quanto fa in base 5 ? <<< quanto fa in base 6 ? calcolare in base 8 calcolare 1202 x 22 in base 3 <<<

83 addendo addendo passo somme riporti somme riporti passo somme riporti somme riporti passo somme4 1 riporti somme4 1 riporti passo somma finale riporti finali verifica: = =27 10 ; = =55 10 ; 27+55= ; = = calcolare in base 2

84 84 quanto fa in base 4 ? (n.b: 2+3=11) | | in breve: somme parziali | riporti | | somma finale | quanto fa in base 5 ? in breve:

85 85 quanto fa in base 6 ? Ricorda: 3+5=12 (in base 6), scrivo 2 riporto 1 … 4+2 = 6 (in base 6), quindi 10, scrivo 0 riporto 1

86 86 calcolare in base calcolare 1202 x 22 in base x

87 87 esercizi verificare: 1) 1984 (base 10)= (base 3) = 3700 (in base 8) 2) 2576 in base 8= (in base 2) 3) = 31 (base 8) 4) C * D = 9C (base 16) (segue soluzione)

88 88 1a) 1984 (base 10) = (base 3) 1984/3 = 661 resto /3 = 220 resto /3 = 73 resto /3 = 24 resto /3 = 8 resto 0 0 8/3 = 2 resto 2 2 2/3 = 0 resto 2 verifica: vale in base 10: (((((2*3+2)*3+0)*3+1)*3+1)*3+1)*3+1= (((( 8*3+0)*3+1)*3+1)*3+1)*3+1= ((( 24*3+1)*3+1)*3+1)*3+1= ((73*3+1)*3+1)*3+1 = (220*3+1)*3+1 = 661*3+1= = 1984

89 89 esercizi 1b) 1984 (base 10) = 3700 (in base 8) 1984/8 = 248, resto /8 = 31, resto /8 = 3, resto 7 3/8 = 0, resto 3 Verifica: 3*8^3 + 7*8^ = 3* *64 = = 1984

90 90 esercizi 2) 2576 in base 8= (in base 2) basta espandere le cifre ottali in gruppi di 3 bit, Ricordando la tabellina di corrispondenza binario - ottale: da cui: che e' il risultato richiesto

91 91 esercizi 3) = 31 (base 8).. ricorda la tabella di addizione da cui: 0 | | | | | <-1 5 | | |

92 92 esercizi 4) C * D = 9C (base 16) C = 12 (ricorda: A=10, B=11, C=12, D=13, E=14, F=15) D = * 13 = = , divido ripetutamente per 16: 156/16 = 9 (16*9= 144, =12=resto=C) 9/16=0, resto 9, quindi = 9C 16

93 93 FRAZIONI Come si interpreta in base 4 : 2321,0222 Oppure: come si trasforma la codifica 39,71 da base 10 in base generica ?

94 94 FRAZIONI Come si trasforma da base b1 a base b2 un dato numerico con parte fratta non nulla - ad es.: 3, = xx, yy 16 ? Dalla definizione: 0,abcde... in base B rappresenta il numero: a b c d e B B^2 B^3 B^4 b^5

95 95 FRAZIONI Cambio base: 29,45 = ,45 per cambiare base trasformo separatamente la parte intera e separatamente la parte fratta: Per la parte intera sappiamo gia' come fare 29 (base 10) = xxx (base b) Per la parte fratta: 0,45 = 0,abcdef... in altra base b ?

96 96 FRAZIONI Per la parte fratta: 0,45 = 0,abcdef... in altra base b ? ricorda la definizione: 0,45 = 4/10 + 5/ e : 0,abcde in base b significa ovviamente a/10 + b/100 + c/ d/ e/ essendo 10, 100, 1000 ecc espressi nella nuova base, ovvero b, b^2, b^3, ecc

97 97 FRAZIONI Ancora: 0,5 in base 10 vale 0,1 in base 2 (un mezzo) -- ovvero: 5/10 (base 10) = 1/10 (base 2) = 1/2 in base 10 quindi 0,5 10 = 0,1 2 Ancora: 0,125 in base 10 = 1/8 in base 10 = 1/100 in base 2 quindi 0, = 0,001 2

98 98 FRAZIONI 0,45 10 = 0,abcdef... b da base 10 ad altra base b procedimento per calcolare le cifre abcdef... della parte fratta nella nuova base: moltiplico entrambe le parti per b - 0,xxx * b = 0,abcdef... * b ottengo a sinistra e a destra una cifra intera, y,zzz = a,bcdef... devono essere uguali sia la parte intera che la parte fratta, separatamente, quindi ottengo la prima cifra della parte fratta ! y = a... e poi ripeto...

99 99 conversione di base per frazioni 0,45 = 0,abcdef... conversione da base 10 a base 5 se moltiplico entrambe le parti per b : 0,45 * 5 = 0,abcdef... * 5 ottengo: 2,25 = a,bcdef... devono essere separatamente uguali la parte intera e la parte fratta, quindi 2 = a ottengo la prima cifra della parte fratta moltiplicando il dato di partenza (in base 10) per la base nuova b (qui cinque); ripeto con solo la parte fratta: 0,25 * 5 = 0,bcdef * 5 ottengo: 1,25 = b,cdef... e quindi 1 = b

100 100 conversione di base per frazioni 0,45 = 0,abcdef... conversione da base 10 a base 5 moltiplico ripetutamente entrambe le parti per b, ad ogni passo ottengo una cifra della parte fratta in base b, e poi ripeto con solo la parte fratta rimasta: 0,45 * 5 = 0,abcdef... * 5 ottengo: 2,25 = a,bcdef... quindi a = 2; ripeto: 0,25 * 5 = 0,bcdef... * 5 ottengo: 1,25 = b,cdef... e quindi b = 1; ripeto: 0,25 * 5 = 0,cdef... * 5 ottengo: 1,25 = c,def... e quindi c = 1; ripetendo, 0,45 10 = 0, in base 5 (periodico)

101 101 conversione di base per frazioni 2) esempio: trasformare 0,71 da base 10 in base 5, cioe' trovare le cifre a,b,c,d,... della parte fratta in base 5. 0,71 = 0,abcdefg.. ==>> moltiplico ripetutamente per 5: / in base 10 \ / parte in base 5 \ 0,71 * 5 = 3,55 = a,bcdefg... quindi a = 3 0,55 * 5 = 2,75 = b,cdefg.... quindi b = 2 0,75 * 5 = 3,75 = c,defg..... quindi c = 3 0,75 * 5 = 3,75 = d,efg quindi d = 3 (periodico) quindi 0,71 10 = 0, cioe' = nota: spesso ottengo un numero periodico nella nuova base!

102 102 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 si ripete, quindi: 0,45 (base 10) = 0,

103 103 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

104 104 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 …

105 105 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

106 106 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 = ,1 10 = 0,a bcde = 0, rimane da calcolare 0,2 = 0,fghi che e' la stessa situazione di 0,2 = a,bcde

107 107 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, la sequenza 0011 si ripete all'infinito (frazione periodica), e quindi 0,1 10 =0,

108 108 come si scrive 1/10 (decimale) in base due? abbiamo visto come si ricava 0,1 = 0,abcdefghi... 0,1 10 = 0, 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/ / / / / / e quindi 0/10 10 = 0, (approssimazione a 5 cifre) -> 0, = 0, , , , , = 0, che e' DIVERSO da 0,1 !

109 109 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, =1/10 (base10) = 1/16 + 1/32 + 1/ / / e quindi con 12 cifre binarie della frazione (5 addendi) : 0, = 0, , , , , = 0, 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 !! )

110 110 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, ,0625 = = 0,6875 in base 10

111 111 frazioni es per base 16 ricordiamo: ogni cifra esadecimale usa 4 bit; il numero di bit usati per le potenze di 16: 1)10 16 = = 16^ ) = = 16^ ) = = 16^ ) = 16^ ) , (un mega) 6) , ) , ) , (4 giga)...per scrivere un valore di 4G devo usare 32 bit (per avere un indirizzo di 4G devo usare 32 bit; ritorneremo su questo in HW

112 112 frazioni es 0,5A51 16 (4 cifre esadecimali = 16 bit) = 5/ / / / = 0, , , , = 0, (qui, conversione da base 16 a base 10, il numero di cifre in base 10 e' finito o no? ;-)

113 113 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: 1/3 = 0, MA per le basi 2,4,8,16, eccetera 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

114 114 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/128 0, /4 0,251/256 0, /8 0,1251/512 0, /16 0,06251/1024 0, /32 0,031251/2048 0, /64 0, /4096 0, /n 0,000..abcd..gh25

115 115 limiti rappresentazione dei numeri NEL calcolatore: i limiti dei formati standard (fissi)

116 116 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 oppure da a (in C: int) 32 bit, da 0 a oppure da -2G a + 2G, (in C: long int) 64 bit, long long int 80 bit... ecc ________________________________________________________________________________________________ (*) 4 bit: 0..15; 8 bit: ; 10 bit: ; 12 bit: ,.. (+) int, short int = nomi di tipi di variabili nel linguaggio di programmazione C

117 117 limiti della codifica nel calcolatore con 4 bit, sono rappresentabili 16 numeri senza segno: = = = = = = = = = = = = = = = =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 il risultato esce dall' insieme dei numeri rappresentabili, -> errore di troncamento o traboccamento = " overflow "

118 118 limiti della codifica nel calcolatore Analogamente (o peggio) per le frazioni: ricordiamo solo il numero 1/10 10, cioe' 0,1 10 = 0, ,1=1/10 (base10) = 1/16 + 1/32 + 1/ / / e quindi con 12 cifre binarie dopo la virgola ( 5 addendi ) 0, = 0, , , , , = 0, che e' diverso dal dato 0,1 !! con formato fisso di 8 bit la rappresentazione di 0,1 diventa: 0, = 1/16 + 1/32 + 1/256 = 0, , , = 0, che e' anora peggio (piu' diverso da 0,1) !

119 119 rappresentazione di numeri con segno

120 120 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: ad esempio con 2 bit ho: 00 = 0 01 = 1 10 = 2 11 = 3 oppure00 = 0 01 = 1 10 = = -1

121 121 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: senza segno con segno/a con segno/b con segno/c... in quanti modi posso associare 8 simboli a 8 codifiche?

122 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. ( ) 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 (A) (B)

123 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, ( ) 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' scelte.

124 124 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! possibili codici diversi ) codice num1 num2 num3 num4 num5 …

125 125 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: RAPPRESENTAZIONE : GRANDEZZA CON UN BIT PER IL SEGNO questa codifica non e usata ;-) vediamo ora le 3 codifiche piu usate per i numeri con segno: complemento a uno, complemento a due, con eccesso di 2^(k-1)

126 < 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: codice di +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

127 127 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 < codice +2 = 0 10 codice -2 = 1 01 codice +3 = 0 11 codice -3 = 1 00

128 128 numeri con segno : il complemento a uno in complemento a uno: -x e' rappresentato con il complemento di x bit per bit, cioe' da: (2 n -1) -x (*) -5 in un codice a 4 bit in complemento a uno e dato da: (2 4 -1) -x = ( ) = (15 - 5) 10 = ( ) = = 1010 = complemento bit per bit di in un codice a 4 bit in complemento a uno e dato da: (2 4 -1) - x = ( ) -3 = = 1100 da cui la tabella gia vista.. (*) nota: se uso n bit, 2 n non e rappresentabile ad es. se uso 3 bit, 2 3 = 8 = 1000 non e rappresentabile; il numero piu grande rappresentabile con n bit e 2 n -1, che e' il codice con tutti i bit messi a 1 ad es. con 3 bit e 111 = = 8 - 1=7 )

129 129 numeri con segno : il complemento a uno complemento a uno: -x e' rappresentato con il compl. di x bit per bit, cioe' -x e rappresentato da (2 n -1) - x = x es -5 con 4 bit in complemento a uno: (2 4 -1) -x = ( ) - 5 = = | | | | | | | | si noti: la codifica e simmetrica, i numeri rappresentabili con 4 bit vanno da -7 a +7, vi sono due codifiche dello zero!

130 130 numeri con segno : il complemento a uno con 4 bit (numero bit n=4) ho: | | | | | [n = 4, n-1 = 3 bit per il dato -> per i positivi da 0 a 7, per i negativi, da - 0 a - 7] in generale in complemento a uno con n bit rappresento i numeri da - (2 n-1 -1 ) a + (2 n-1 -1 ) il num. piu positivo x ha il codice (2 n-1 -1 ) = = = 0111 = 7, il numero piu negativo e rappresentato (ha il codice) da ( 2 n -1 - x) = ( (2 n -1) - (2 n )) = (2 n-1 +2 n-1 -1) - (2 n-1 -1 )) = = 2 n n n = 2 n = = 2 n-1 = ( se n=4) = 8 = 1000 = rappresentazione di -7...

131 131 numeri con segno : il complemento a uno il codice (complemento a uno) di un dato negativo e' dato dai bit del dato (positivo), complementati uno per uno: 0110 sei, 1001 meno sei, 0101 cinque, 1010 meno cinque questo codice permette di fare l' ARITMETICA di numeri con segno in modo semplice : = -1 in codice binario con complemento a uno? la rappresentazione in complemento a uno e' consistente con le operazioni di aritmetica, ovvero posso sommare i codici di un numero positivo e di un numero negativo e ottenere il codice corretto del risultato. vi sono tre casi da considerare a seconda dei riporti riguardo il bit del segno (nessuno, uno, due riporti)... vediamo...

132 132 aritmetica in complemento a uno la rappresentazione in complemento a uno e' consistente con le opera- zioni di aritmetica: si sommano i codici dei numeri con segno e e si ottiene il codice corretto del risultato: due casi senza riporto al- o dal- bit del segno: 1) caso di risultato positivo 3+2 = ) caso di risultato negativo 3-4 = [(2 4 -1)-4]= (2 4 -1)-1 = che e' la codifica di

133 133 numeri con segno : il complemento a uno aritmetica numeri con segno, caso con 2 riporti al/dal segno: 3) caso di risultato positivo = 3 nota: codice di -4 = –4 = Quindi (2 4 -1) = = => c'e' un riporto a sini stra, dal bit del segno, il riporto si somma a destra, 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 !

134 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 = 2

135 135 se il risultato e' negativo, e non vi sono riporti ne' nel bit del segno, 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

136 136 5) caso di risultato negativo, due riporti: = = codici di –1 e –5 in complemento a uno: [(2 4 -1)-1]+[(2 4 -1)-5]= [2 4 +(2 4 -1)-7 ] = il riporto da sinistra si somma a destra

137 137 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...

138 138 numeri con segno : il complemento a uno 7) caso di overflow,dove il risultato NON erappresentabile(un solo riporto al segno) risultato si legge 5+6= [[un solo riporto verso il bit segno -> errore di trabboccamento->overflow]] 8) caso di overflow [[un solo riporto dal bit del segno -> errore di overflow ]] si ottiene: -5-6 = 3

139 139 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, e e' un codice simmetrico rispetto lo zero: +6 codice codice due zeri: codice 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': codice 1 111

140 140 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 010

141 141 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: | | | < | | | | < | la rappresentaz.e di un num. negativo in complemento a due e data dal complemento bit per bit, e poi sommando uno: +2 = > cod.di -2 = = 1 10 = -2 il primo bit e il bit del segno, gli altri codificano il numero +3 = > cod.di -3 = = 1 01 = -3

142 142 RAPPRESENTAZIONE IN COMPLEMENTO A DUE rappresento -x in complemento a due con (2 n - x ) (*) ad es: -5 e' rappresentato da - (2 4 -5) = ( ) = (( ) ) = ( ) = = 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: = _____ (*) codice di –x in complemento a uno: ( 2 n -1 ) - x

143 143 RAPPRESENTAZIONE IN COMPLEMENTO A DUE comlem. a due: -x e rappresentato da 2 n -x = x -5 con 4 bit 2 4 -x = = | | | | | | | | si noti: la codifica non e simmetrica, i num. rappresentabili vanno da -8 a +7, e c'e' una codifica dello zero!

144 144 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 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.

145 145 RAPPRESENTAZIONE IN COMPLEMENTO A DUE complemento a due : x = +10 codice , x = -10 codice? -x rappresentato da 2 n -x = 2 n -1 -x+1.. qui n=6, = – = – = compl.bit per bit + 1 = con 6 bit si rappresentano i numeri da -32 a +31: -2 n-1 = -2 5 = - 32 = n-1 -1= = +31 = codice a 6 bit, 5 bit dato (numeri da 0 a 31), 1 bit segno:

146 146 numeri negativi: codifica in complemento a due ovvero: (2^4-3)+2= 2^ che rappresenta per definizione ovvero (2^4-2)+4 = 2^4+2, ignoro il riporto a sinist che e dato da 2^ [[n.b.: due riporti, uno dal e uno nel bit segno]] (2^4-3)+(2^4-2)=(2^4-5)+2^ il riporto (2^4) ignorato [[n.b.: due riporti, uno dal e uno nel bit segno]] anche qui il risult. e' ok

147 147 numeri negativi: codifica in complemento a due quando il risultato NON e rappresentabile: [[un solo riporto verso il bit segno -> errore di trabboccamento->overflow]] [[un solo riporto dal bit del segno -> errore di overflow ]]

148 148 diversi modi di rappresentare numeri con segno: a b c d = 0 (a = segno, b = cifre dato) = 3 c = codifica senza segno = 4 d = codifica in complemento a uno = 5 e = codifica in comlemento a due = 6 f = codifica in grandezza con segno = 7 <-- fino qui(segno +)come noto,poi: a b c d e f = = = = = = = = codifica complemento a due (colonna e) -5 si scrive: 1011 in compl. a uno (col. d) -5 si scrive: 1010 in grandezza con segno (colonna f) -5 si scrive: 1101

149 149 cont. RAPPRESENTAZIONE DI NUMERI CON SEGNO abbiamo visto le due codifiche piu usate per rappresentare i numeri con segno, codifica in complemento a uno codifica in complemento a due vediamo ora due codifiche derivate da queste, rappresentazione in eccesso di k usate nella rappresentazione dei numeri in virgola mobile (tipo: 3,77 E-52 ) per la parte dellesponente...

150 150 ancora 2 modi di rappresent. numeri con segno: = colonna: = a= segno, = b= bit per il dato, = c = decimale, = d = complemento a due = e = rappresentazione = in eccesso di 2^N = con complemento a uno = = f = rappresentazione = in eccesso di 2^N = con complemento a due = num.positivi segno = nota che i numeri = negativi hanno il = bit del segno zero a b c def

151 151 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 = = = 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 -> = [codice di -5] -> ora, se rappresento -5 in complemento a uno allora: 2^3 + (-5) = = 0010 (colonna d) (ignoro il riporto dal rango del segno!)

152 152 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 = = = > = codice di -5 -> -5 codice con eccesso di 2 3, complem.a uno: 2^3 + (-5)= = 0010 (colonna d) -5 codice eccesso di 2 3, in complem.a due: 2^3 + (-5)= = 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

153 153 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

154 = c= codifica senza = segno = d= codice in complem = a uno (due zeri!) = la piu' usata: = e= codifica in com = plemento a due = (non simmetrica) = = f= rappresentazione = in eccesso di 2 N = con compl. a uno = g= rappresentazione = in eccesso di 2 N, = con complem.a due = codifiche f,g hanno i a b c d e f g num.negat.con segno 0

155 155 esercizi aritmetica con segno: 1) esercizio: calcolare la somma : in due versioni, complemento a uno complemento a due usare una codifica a 4 bit,

156 156 in complem. a uno +3 -> > ottengo il codice di (ricorda: il riporto da sinistra si somma a destra ) complemento a due: (due riporti ignoro riporti) esercizi aritmetica con segno:

157 157 esercizi aritmetica in complemento a uno es.2) calcolare in complemento a uno con codice a 4 bit:

158 158 esercizi aritmetica in complemento a uno calcolare (complemento a uno, codice a 4 bit) : codice , codice , , quindi somma : risultato - ma vi sono due riporti al/dal segno, si somma il riporto: ottengo il codice di +2

159 159 esercizi aritmetica in complemento a uno calcolare (complemento a uno, codice a 4 bit): codice di , codice di , di ,quindi somma : nessun riporto al/dal segno, ho direttamente il risultato meno uno

160 160 esercizi aritmetica in complemento a uno calcolare (complemento a uno, codice a 4 bit) codice di , di codice di , di , quindi somma : due riporti al/dal segno, sommo il riporto: risultato codice di -5

161 161 esercizi aritmetica in complemento a uno 3) stessi esercizi, ma in complemento a due; 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 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 )

162 162 esercizi aritmetica in complemento a due, codice a 4 bit 6 -4 codice di codice di , -4: = somma: risultato (il doppio riporto in e dal bit del segno e' ignorato)

163 163 2) esercizi aritmetica in complemento a due con codice a 4 bit codice di codice , di -6: =1010 somma: (nota:1=0001, compl.a 1 di - 1 e' 1110, poi +1 ottengo 1111) codice di , -2: = codice di , -3: = somma: ignoro doppio riporto (5=0101, -5= =1011=risultato sopra)

164 164 codifiche di -2, -6, -7, -13 con una rappresentazione di 5 bit 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)

165 165 codifiche di -2, -6, -7, -13 con una rappresentazione di 5 bit 3) 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 = codice di -2 = = codice di +7 = , codice di -7 = = codice di +9 = , codice di -9 da = , codice di +13 = , codice di -13 = = ,

166 166 FINE CODIFICHE NUMERI NEGATIVI

167 167 floating point = float, real, …(*) numeri in virgola mobile - numeri molto... grandi numeri molto... piccoli (*) corrisponde ad un tipo standard di molti linguaggi di programmazione

168 168 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, = 0, * 10 1 = 3, * 10 0 = * = 0, * 10 5 = ( , -8 ) ecc = 0, * E+1 <<== 0, E+1 = forma normalizzata in virgola mobile

169 169 codifica in virgola mobile 0, E+1 = forma normalizzata in virgola mobile le varie parti sono codificate separatamente : (qui 10 = la base dell'esponente, e' implicita) segno/cifre /segno esponente/cifre espon. +, in binario: +, ovvero +, (ricorda: 0,001 * 2 2 = 0,01 * 2 1 = 0,1 * 2 0 = 1 * 2 (-1) = 10 * 2 (-2) =... 0,314E+1-> 314 = cifre = mantissa E+1 = esponente = caratteristica

170 170 codifica in virgola mobile + 0, E + 01 = forma normalizzata in virgola mobile Sono in ogni caso presenti : il segno del dato + le cifre del dato (mantissa) = = precisione del dato, (nota: la posizione della virgola decimale e' a sinistra della prima cifra non nulla del dato) il segno dell'esponente + le cifre dell'esponente (caratteristica) = 01 = ordine di grandezza del dato.

171 171 precisione nella codifica in virgola mobile + 0, E + 01 la virgola (decimale o binaria) si assume generalmente a sinistra della prima cifra del dato. [ricorda: scrittura italiana: 0,314E+1 (virgola mobile) -- scrittura anglosassone: 0.314E+1 ( floating point ) Il numero delle cifre del dato (mantissa) determina la precisione della rappresentazione; definizione: precisione il numero x piu' di una codifica =piccolo tale che in virgola mobile x <> 1.0

172 172 codifica in virgola mobile precisione il numero x piu' di una codifica =piccolo tale che in virgola mobile x <> 1.0 ad es. nel caso sopra, assumiamo la codifica con 7 cifre, allora la precisione e data da +0, E+01 = 1,0E-7 se provo a sommare 1.0 = 1,0E+00 = 0,1 E +01 e +0, E+01 = 1,0E-7 cosa si ottiene?

173 173 codifica in virgola mobile codifica a 7 cifre, la precisione e +0, E+01 = 1,0E-7 provo a sommare 1.0 = 1,0E+00 = 0,1 E +01 e +0, E+01 = 1,0E-7 per sommare, devo avere esponenti uguali, uso il piu'grande: 0, E+01 +0, E , E+01 risultato diverso da 1,0E+00, quindi vale appunto che x <> 1.0 ma vediamo con un x piu' piccolo, dove 1.0+x =

174 174 codifica in virgola mobile 1+x = 1 se x e' piu' piccolo della precisione- 1 e' codificato con: 0, E+01 un x < 1.0E-7, ad es. 4.0E-8: 4, E-08 per sommare, devo avere esponenti uguali, uso il piu'grande: 0, E+01 +0, E , E+01 risultato con otto cifre per il dato - ma il formato e' fisso: il risultato deve avere 7 cifre! quindi l'ultima cifra viene troncata (arrotondata) e si ottiene: 0, E+01 e quindi ottengo il risultato uguale al primo addendo !!

175 175 codifica in virgola mobile In virgola mobile posso rappresentare numeri molto piccoli o molto grandi utilizzando lo stesso numero di cifre (qui sotto 6 cifre - quattro per il dato, 2 per esponente ) in un formato fisso: 27,53-> 0,2753 E+02 0, > 0,7986 E-10 piccolo > 0,1234 E+16 grande codifico ora i numeri con un ipotetico formato in virgola mobile a 6 cifre decimali, (come sopra 4 per il dato, 2 per l' esponente); i tre dati di sopra codificati si rappresentano : | + | + | 02 | 2753 | primo dato 27,53 | + | - | 10 | 7986 | 2.o dato 0,7986 E-10 | + | + | 16 | 1234 | 3.o dato 0,1234E+16

176 176 27,53 0,2753 E+02 0, ,7986 E ,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

177 177 codifica in virgola mobile nota - la rappresentazione di un numero in floating point definisce come si codifica (si scrive) la parte delle cifre (mantissa) e la parte che da' l'ordine di grandezza (esponente, caratteristica) 123,456 si scrivera': 0, 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)

178 178 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 => SZEEDDDD quindi 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 quindi rappresenta 0,11 * 2 ^ 0

179 179 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= =101, infine il tutto 0,1000*2^(-2) diventa: 0,125 = S E EE DDDD= = _____________ (*) nota: di seguito uso a^b oppure a b per indicare a alla b

180 180 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 rappresenta 5,0 e che 0,125=1/8=0,001 2 si scrive , vediamo i numeri piupiccolo e piugrande: il piu'grande = 0,1111*2 3 = 8 ( circa) il piu'piccolo = 0,0001*2 -3 = 1,0*2 -7 = 1/128

181 181 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 = , -5,0 = ,75 = , -0,75 = ,125 = , -0,125 =

182 182 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.

183 183 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 => ,14 = 3,14*10^00=0,314*10^1=> ,00123=,123*10^-2 => il numero piu' piccolo => 0,1000E-99 il numero piu' grande => 0,9999E+99 NOTA: qui l' esponente e' con base 10 - se cambio base?

184 184 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 => il numero piu' piccolo = 0,1000*(1000^(-99)) = = 0,1000*((10^3)^(-99)) =0,1000*10^297 = 0,1000 E -297 il numero piu' grande = 0,9999*(1000^(-99)) = = 0,9999*((10^3)^(99)) => 0,9999 E+297 aumentano i limiti di ordine di grandezza MA ->perdo cifre (precisione): 3,14 = 3,14 *1000^0 = se cambia espon.di uno la virgola si sposta di TRE posizioni (base esponente e' 1000) !! = 0,00314*1000^1 => ,00123 =,00123*1000^0 =>

185 185 floating point: base dell'esponente in alcuni modelli di calcolatori sono state usate basi diverse dalla base due: ad esempio con base 16, e quindi 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

186 186 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=> se la base dellesponente invece di 10 e 1000 allora abbiamo: 3,14=3,14*1000^0=,00314*1000^1=> 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

187 187 ancora: 93,93 = 0,9393 *10^2 => = 0,45678*10^+5 => ,00712 = 0,712 *10^-2 => ,5555 = 0,5555 *10^-0 => se la base dellesponente invece di 10 e 1000 allora abbiamo: 93,93 = 0,09393 *1000^1 => <<== 45678,0 = 0,045678*1000^2 => <<== 0,00712 = 0,00712 *1000^0 => <<== 0,5555 = 0,5555 *1000^0 => <<== perdo cifre significative, qui in media perdo 1,5 cifre (meta cifre della base) guadagno in limiti di grandezza: ho 1000^(-99) ^99 invece di 10^(-99) -- 10^99. codifica in virgola mobile

188 188 esercizio floating point: 7,7E0 in binario ? esercizio floating point: dato il formato: 12 bit divisi come segue: 1 bit segno del dato 1 bit segno dell'esponente (codifica con eccesso di 2^3) 3 bit valore esponente (e in complemento a uno) 7 bit valore del dato - ma attenz.: vedi nota qui sotto dove il 1.o bit del dato e' sempre uno, e non e' memorizzato (ovvero se il dato - parte mantissa - vale , virgola binaria posta davanti la prima cifra, il dato e' memorizzato nella parte cifre come (1.o bit 1 implicito) trovare la rappresentazione di 7,7 E0

189 189 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, * 2^2

190 190 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, * 2^2 quindi: parte cifre 1, , -> 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: =1010 metto insieme e ho: = 6,875 E+0 la precisione e' veramente scarsa... visto le poche cifre per il dato ;-)

191 191 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 ,250E + 1 = ( 0, ,250 ) * 10 ^ 1 = = 0,564 * 10^1 = = 0,564 E + 1

192 192 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 -> e1<>e2 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 * ,00333 * 10 = (0, ,00333) * 10 = 0,22533 E+1 <<== RIS. siccome ho solo 3 cifre disponibili -> si troncano le cifre = 0,225 E +1 <== inevitabile errore di troncamento !!!

193 193 somma in virgola mobile - normalizzare risultato attenz: se la somma delle mantisse fornisce un numero maggiore di uno allora si deve normalizzare il risultato: 0,966 E+1 + 0,555 E+0 = 0,966 E+1 + 0,0555E+1 = 0,966 * ,0555 * 10 = = ( 0, ,0555 )* 10 = (1, 0215) * 10 = 1,0215 E+1 = 0,10215 E+2 [esponente normalizzato] = 0,102E+2 forma normalizzata solo 3 cifre -> abbiamo di nuovo un errore troncamento ! ancora un es.: 0,997E+1 + 0,00423E+1 = 0,997 * ,00423 * 10 = (0, ,00423) * 10 = 1,00123E+1 = 0,100123E+2 = 0,100E+2

194 194 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

195 195 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, ,7044 = 99, sommiamo: 991, > normalizzo - 100, > lesponente e > 99 non posso rappresentare l'esponente 100 -> il risultato esce dai limiti della codifica ! ==> errore di traboccamento ==> overflow

196 196 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, = 99, , > normalizzo - 100, > 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.

197 197 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,

198 198 standard IEEE 754 del 1985 formato a 32 bit (single precision) 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 l'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 e (dato normalizzato) esponente binario codice a 8 bit da -126 a +127, con base 2 e rappresentazione in eccesso di 127; (codici e usati per valori speciali) 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

199 199 es. il dato si codifica come segue: = = x 2 5 che per l'esponente da': = 132 = (8 bit) e per la mantissa 1, (23 bit) e per il segno 0 (1 bit) totale:

200 200 Nota: il numero piu' grande per un numero in virgola mobile a 32 bit in formato standard e' esponente (8 bit, base 2): 127 = mantissa:(2-2^(-23))= quindi il valore (massimo) rappresentato e': max = (2-2^(-23))*2^(127) = 3.403*10^38 ed il valore minimo (piu' piccolo) ? dato normalizzato, la mantissa piu' piccola e' 1.0 esponente piu' piccolo (base 2) e' -127

201 201 standard IEEE formato a 64 bit (double precision) circa 15 cifre decimali e intervallo da 10^-300 a 10^300, max 1.7 E+308 min 5.0 E-324 non normalizzato posit. min 2.3 E-308 normalizzato posit. esponente binario 11 bit da a +1023, mantissa: 52+1 (bit implicito) bit cioe' la precisione e' di 15,5 cifre decimali formato bit: S EEE EEE EEE EE DDDDD DDDDD DDDDD DDDDD DDDDD DDDDD DDDDD DDDDD DDDDD DDDDD DD

202 202 standard IEEE formato a 80 bit (extended) max 1.1 E+4932 min 1.9 E-4951 non normalizzato posit. min 1.7 E-4932 normalizzato posit. precisione: 19,5 cifre esponente binario 15 bit da a 16383, mantissa: 63+1 bit (19,5 cifre decimali) formato in binario: S EEEEE EEEEE EEEEE DDD DD DDD DDDDD DD DDD DD DDD

203 203 standard IEEE quadrupla precisione a 128 bit: 15 bit per l'esponente 111 bit per la mantissa (normalizzata con 1 davanti la virgola binaria) massimo esponente (con base binaria)

204 204 altre rappresentazioni (non piu'usate) osservazione: gli stessi bit possono essere divisi in molti modi, e prima dello standard IEEE 754 erano in uso ad es. l' IBM 370 usava la codifica: esponente 7 bit, base 16; mantissa 24 bit (7,5 cifre circa) quindi il massimo rappresentabile max = 16^63 * 0,FFFFFF = 0,9999 * E+75 min = 16^(-64) * 0, = 0,1 * E-79 fino agli anni 80 erano in uso molte codifiche diverse, ogni casa costruttrice usava una sua codifica (la Digital usava una sua (su VAX), la Control Data usava una ancora diversa a 60 bit, ecc)

205 205 codici per infinito / non definito Nota 2) : lo standrad prevede dei codici particolari per indicare numeri "molto grandi" o "praticamente infiniti", usati per i risultati di operazioni del tipo: 7,5 / 0.0 e altri codici per indicare numeri "non definiti" usati per il risultato di un'espress. aritm. del tipo: infinito * zero zero / zero viene poi definita un' aritmetica per questi codici, del tipo: infinito * x = infinito, non_definito + x = non_definito...

206 206 unita' aritmetica per interi / per virgola mobile Nota 3): Le operazioni aritmetiche in virgola mobile sono piu' complesse delle operazioni analoghe su interi, e la realizzazione hw e' piu' complessa. Le istruzioni aritm. in virgola mobile sono realizzate (su calcolatori piccoli) con sequenze di istruzioni apposite (sottoprogrammi); L' aritmetica in virgola mobile e' realizzata circuitalmente in un'unita' di calcolo "floating-point unit", che puo'essere separata dall'unita' centrale, cosi erano ad es. INTEL f.p.u o MOTOROLA f.p.u ) oppure fa parte dell'unita' centrale, che diventa un po' piu' grande; cosi' era per i calcolatori "grandi" (mainframe, es VAX9000, IBM 370-XA - ma anche nei micro processori successivi al 1995 per personal, tipo Intel Pentium o Power PC o ALFA)

207 207 Esercizi: 1) *) e dato un formato di numero in virgola mobile (binario) con 16 bit di cui 10 per le cifre (mantissa) e 5 per l'esponente (compreso il segno dell'esp. z): S Z E E E E D D D D D D D D D D <= binario a) trovare la precisione in decimale (quante cifre decimali, ovvero il numero x piu' piccolo tale che 1+x <> x) b) trovare la codifica binaria in tale formato di: 13.5 (in base 8) = (in base 10), poi di 6.5 (in base 10), e 5.55 (in base 10) -> per questo valore trovare poi (dal codice binario in virgola mobile) il valore corrispondente in decimale: quante cifre sono state perse?

208 208 esercizi 2) *) dato il formato di numero in virgola mobile [formato di codifica gia' visto] con 16 bit, di cui 10 per le cifre (mantissa) e 5 per l'esponente (compreso segno dell' espon. z): S Z E E E E D D D D D D D D D D c) sono rappresentabili esattamente i dati: 3.5, 23.0, 555.0, , ?

209 209 esercizi 3) *) trovare le regole per a) la moltiplicazione e b) la divisione in virgola mobile (si usi un formato decimale a 6 cifre, di cui 2 per l' esponente e 4 per la mantissa)

210 210 indice sistemi posizionali 2 rappresentazione di numeri 15 conversione analogico - digitale 16 immagini digitali: pixel, colori 28 sistema unario 33 il sistema latino 35 codici posizionali in varie basi 60 un quiz 63 somme numeri in base 2, 3,.. 67 prodotto in binario 72 base sedici (esadecimale) 73 cambio base 82 esercizi 93 frazioni 104 0,1 da base 10 a base due 115 limiti e overflow

211 211 indice capitolo numeri con segno: NUMERI CON SEGNO 120 numeri con segno 126 numeri in complemento a uno 132 somme con segno 140 complemento a due 149 rappresentazione in eccesso di k 155 esercizi sui numeri con segno

212 212 indice capitolo numeri in virgola mobile : NUMERI IN VIRGOLA MOBILE 167 rappresentazione di n.i grandi/piccoli 171 precisione 176 limiti 188 esercizio 191 somma in floating point 195 overflow 197 standard IEEE 754 floating point 207 esercizi 210 indice 213 fine parte numeri

213 213 fine parte numeri FINE PARTE NUMERI


Scaricare ppt "1 SISTEMI DI RAPPRESENTAZIONE DI NUMERI. 2 rappresentazione di numeri contenuto: rappresentazione di numeri in basi diverse rappresentazione binaria,"

Presentazioni simili


Annunci Google