Comments
Description
Transcript
Operazioni tra numeri in Virgola Mobile
Operazioni tra numeri in Virgola Mobile • Operazioni di mol.plicazione e divisione: – Le man4sse vengono mol4plicate o divise – Gli esponen4 vengo somma4 o so:ra; – Se necessario, la man4ssa viene rinormalizzata e l’esponente corre:o • Operazioni di somma o so3razione: – L’esponente più piccolo viene reso uguale al più grande spostando la man4ssa verso destra del numero di cifre pari alla differenza tra gli esponen4 (shiD per o:enere un corre:o incolonnamento) – Le man4sse vengono sommate o so:ra:e – Se necessario, la man4ssa viene rinormalizzata e l’esponente corre:o Esempio: somma 100.01101 Bit di segno= 0 5 bit esponente= 00011 10 bit man4ssa= 1000110100 10.101101 Bit di segno= 0 5 bit esponente= 00010 10 bit man4ssa= 1010110100 Esempio: somma 0 00011 1000110100 + 0 00010 1010110100 Allineo man4ssa 0 00011 1000110100+ 0 00011 0101011010= -‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐ 0 00011 1110001110 Esempio: prodo:o 1.011 à 0 00001 1011* 11.01 à 0 00010 1101 = -‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐ 0 00011 1000111100 Overflow • Per numeri rappresenta4 con un numero finito di bit, la somma può portare ad un numero in valore assoluto troppo grande per poter essere memorizzato nella memoria stessa (OVERFLOW) • 7010+6610 su un byte • 010001102+010000102 = 100010002= -‐2810 su un byte, con rappresentazione in complemento a 2. So:razione in complemento a 2 • Grazie alla rappresentazione in complemento a 2 la so:razione si riconduce ad una somma, rappresentando in complemento il so:raendo. • 2010-‐3010 • 111101102= complemento a 2 su 8 bit = -‐1010 Standard IEEE (Ins4tute of Electrical and Electronics Engineers) per la rappresentazione in virgola mobile • Diversi forma4 per la rappresentazione dei numeri reali che differiscono per il numero totale di bit u4lizza4. I più diffusi: – a precisione singola, con 32 bit – a doppia precisione, con 64 bit Rappresentazione IEEE in singola precisione. • L’interpretazione è abbastanza par4colare: – lo standard deve perme:ere di rappresentare non solo un insieme di numeri reali quanto più ampio possibile, con la massima precisione possibile, – ma anche valori speciali quali • NaN – “Not a Number” : risultato di operazioni non ammesse quali la divisione per zero, • +∞ e -‐∞ • Interpretazione della cara:eris4ca n – valore compreso tra 0 e 255 (8 bit) – i valori estremi (0 e 255) sono interpreta4 in una maniera speciale, – i valori compresi tra 1 e 254 (inclusi) sono interpreta4 come esponente del numero razionale so:raendo 127 al valore effe;vamente rappresentato: • se n=131 allora l’esponente del numero rappresentato vale 4, mentre se n=125 l’esponente vale -‐2. In questo modo è possibile rappresentare tanto esponen4 posi4vi quanto nega4vi, interpretando il numero effe;vamente rappresentato come un intero senza segno (cosa che facilita i confron4). • Interpretazione della man4ssa – rappresentata in forma normalizzata su 23 bit ignorando il primo bit: – il primo bit deve valere 1 (come vedremo il valore 0 ha una sua rappresentazione specifica). – Trascurando quindi il primo bit e rappresentando solo la parte frazionaria della man4ssa, si o;ene di fa:o l’equivalente di 24 bit. • Casi speciali: – Il valore 0 viene rappresentato ponendo a 0 tanto la cara:eris4ca quanto la man4ssa (a seconda del valore del bit del segno è possibile rappresentare i valori -‐0 e +0). – Il valore 255 per la cara:eris4ca viene u4lizzato per rappresentare il valore “infinito” (posi4vo o nega4vo a seconda del valore del segno) se la man4ssa vale 0, o il valore speciale NaN se la man4ssa è diversa da 0. – Se la cara:eris4ca vale 0 e la man4ssa è diversa da 0, quest’ul4ma viene interpretata come se si tra:asse di una parte puramente frazionaria (primo bit uguale a 0, quindi non normalizzato) e l’esponente viene posto per convenzione a -‐126. • Riassumendo: – de:o s il bit del segno, n la cara:eris4ca, ed m la man4ssa, valgono le seguen4 regole per il calcolo del valore v rappresentato: – se n=255 e m≠0 allora v=NaN – se n=255 e m=0 e s=0 allora v=+∞ – se n=255 e m=0 e s=1 allora v=-‐∞ – se 0<n<255 allora v=(-‐1)s×2(n-‐127) ×1.m – se n=0 e m≠0 allora v=(-‐1)s×2-‐126 ×0.m – se n=0 e m=0 e s=0 allora v=+0 – se n=0 e m=0 e s=1 allora v=-‐0 • 1.m denota il numero binario razionale composto da un 1, seguito dal punto decimale, seguito dai bit presen4 nella parte riservata alla man4ssa • 0.m denota il numero composto da uno 0, seguito dal punto decimale, seguito dai bit che compongono la man4ssa. • La rappresentazione in doppia precisione è del tu:o analoga ma usa 11 bit per la cara:eris4ca e 52 bit per la man4ssa. Esempio • −118.625 • Segno=1 • Numero binario=1110110.101=1.110110101·∙26 • Esponente=6+127=133 à 10000101 • Man4ssa=11011010100000000000000 • 1 10000101 11011010100000000000000 Esempi IEEE 754 SISTEMI DI CODIFICA Codifica di da4 non numerici: definizioni • I calcolatori lavorano soltanto con i numeri, ma devono poter tra:are anche altre en4tà, per questa ragione sono sta4 inventa4 i codici. • Alfabeto: insieme finito di simboli (caraEeri) disFnF • Parola o Stringa: sequenza finita di simboli Alfabeto usato dai calcolatori • I calcolatori lavorano u4lizzando due simboli: – INTERRUTTORE: aperto/chiuso – TRANSISTOR: conduce/non conduce – LIVELLO DI TENSIONE: alto/basso – RIFLETTIVITÀ DI UN’AREOLA: alta/bassa – DOMINIO DI MAGNETIZZAZIONE: magne4zzato/non magne4zzato • I calcolatori u4lizzano quindi una logica e un’aritme4ca binaria • Ai due sta4 stabili di un disposi4vo, ai due valori di una grandezza, vengono associa4 convenzionalmente i simboli 0 e 1 Alfabe4 usa4 dall’uomo • È necessario stabilire delle regole di corrispondenza, de:e CODIFICHE • La codifica me:erà in corrispondenza biunivoca ogni SIMBOLO appartenente all’alfabeto più ricco con una STRINGA di simboli appartenenF all’alfabeto più rido:o Codifica: definizione • Dato un insieme I di elemen4 qualsiasi, si dice codifica di I mediante parole (o stringhe) di un alfabeto A un procedimento che perme:e di stabilire una corrispondenza biunivoca tra gli elemen4 di I e le parole di un so:oinsieme Q dell’insieme delle parole di A. • Esempio: codifica di le:ere tramite cifre decimali Codici binari: definizione • Un codice binario è la codifica dei simboli di un alfabeto S mediante stringhe di bit. • Se C è la cardinalità (n. di elemen4) di S, il numero n di bit da u4lizzare per codificare tu; i simboli di S deve essere tale che: • Ossia: • M è il minimo numero di bit necessario per codificare S – Se n = M il codice è non ridondante (usa il minimo numero di bit per codificare tu; i simboli di S) – Se n > M il codice è ridondante (usa più bit del necessario per codificare tu; i simboli di S) Esempi Distanza di Hamming • Date due parole della stessa lunghezza, si definisce distanza di Hamming (H) il numero di bit differen4 che compaiono nelle due parole in posizioni corrisponden4. • Esempio: S1 = 00000 00000 S2 = 00000 11111 H = 5 Se due parole di codice hanno una distanza di Hamming uguale a H, ci vogliono esa:amente H errori su singoli bit per trasformare l'una nell'altra. • Es: la distanza di Hamming tra s1=1000 1001 e s2=1011 0001 è H =3 ossia per trasformare s1 in s2 devono cambiare tre bit. Distanza di Hamming • Si definisce distanza di Hamming (H) di un codice: – il minimo numero di bit di cui differiscono due parole qualsiasi del codice • Se n=M (codice NON ridondante) H=1 • Se c’è ridondanza (n>M, codice ridondante) H≥ 1 Esempi • Non sempre se n>M allora H>1. • Esempio: • Alfabeto = {A, B, C} Quanto vale M? Codici a rivelazione/correzione degli errori • In un sistema di comunicazione reale il segnale trasmesso può essere affe:o da errori. • Ci sono due approcci al tra:amento degli errori – Includere abbastanza informazione aggiunFva in modo da poter ricostruire il messaggio originario (correzione dell'errore) – Includere meno informazione aggiunFva, in modo da accorgersi che c'è stato un errore, senza per questo essere in grado di correggerlo (rilevazione dell'errore). • Normalmente, il segnale consiste di : n = m + r bit, dove: – m bit cosFtuiscono il messaggio vero e proprio; – r bit sono ridondan4, e sono de; redundant bit (o check bit). Codici a rivelazione/correzione degli errori • Le capacità di rilevare o correggere gli errori dipendono stre:amente dalla distanza di Hamming del codice scelto. • Per rilevare R errori serve un codice con distanza di Hamming pari a H=(R+1), quindi H>1 – Infa;, in questo caso qualunque combinazione di R errori non riesce a trasformare una parola valida in un’altra parola valida, per cui si ha per forza una parola non valida, che quindi rivela il fa:o che ci sono sta4 degli errori. • Per correggere C errori serve un codice con distanza di Hamming pari a H=(2C+1), quindi H>2 – Infa; in questo caso una parola contenente fino a C errori è più vicina a quella originaria che a qualunque altra parola valida. Capacità rivela4va di un codice • Se si è verificato un numero di errori minore di Hmin, la parola ricevuta non è una parola prevista dal codice e quindi è possibile rivelare gli errori. • Se si è verificato un numero di errori maggiore o uguale a Hmin, la parola ricevuta potrebbe corrispondere ad una parola di codice. In tal caso non sarebbe possibile rivelare gli errori. • La regola da u4lizzare per valutare la capacità rivela4va di un codice è la seguente: • Capacità rivela4va pari a l errori per parola Hmin ≥ l +1 Capacità corre;va di un codice • Se si è verificato un numero di errori minore di Hmin/2, possiamo correggere la parola ricevuta trasformandola nella parola di codice più vicina. • Se si è verificato un numero di errori maggiore o uguale a Hmin/2, non possiamo correggere la parola ricevuta (la parola di codice ad essa più vicina potrebbe non essere la parola che era stata trasmessa). • La regola da u4lizzare per valutare la capacità corre;va di un codice è la seguente: • Capacità corre;va pari a t errori per parola Hmin≥ 2t +1 Esempio • • • • • Date le due parole di codice: X1=(000), X2=(111); Distanze di Hamming: H(X1,X2)=3; Distanza minima del codice: Hmin=3; • Un codice di questo 4po può rivelare sino a 2 errori (2 4pologie di errori, 1 bit o 2 bit) e correggere sino a 1 errore (1 4pologia di errore, 1 bit sbagliato) Esempio Dato il codice composto dalle seguen4 parole: X1=(000), X2=(011), X3=(101), X4=(110); Distanze di Hamming: H(X1,X2)=2, H(X1,X3)=2, H(X1,X4)=2, H(X2,X3)=2,H (X2,X4)=2, H(X3,X4)=2; • Distanza minima del codice: Hmin=2; • • • • • Questo codice può rivelare 1 errore, mentre non può essere u4lizzato per la correzione di errori Codici Ridondan4 a Rivelazione: parità • È un codice con H = 2 • Si o;ene dal codice non ridondante aggiungendo 1 bit in modo che il numero complessivo di bit uguali a “1” sia pari (parità pari) o dispari (parità dispari) • Avendo H=2 può solo rilevare gli errori, e solo se ques4 accadono singolarmente o in un numero dispari nella stessa parola di codice Codici di Hamming • Codici ridondan4 con H>2 e perciò con capacità di auto correzione. • Il più noto e semplice(H=3) prevede di inserire in un codice non ridondante di m bit r bit di controllo in par4colari posizioni . • Perché possa essere corre:o un errore (singolo) deve valere: m ≤ 2r –r –1 – Corregge un bit in posizione arbitraria – Rivela la presenza di un solo errore – Funziona bene se gli errori sono distribui4 casualmente • Esempio: parola di 7 bit (m = 7) • Per creare un codice di Hamming con H=3 (C = 1) bisogna rispe:are la relazione precedente e quindi usare 4 bit di controllo aggiun4vi (r = 4). Esempio: parità • Devo trasme:ere la seguente parola (con parità dispari): 0100