Codifica binaria dei numeri Caso più semplice: in modo posizionale (spesso detto codifica binaria tout court) Esempio con numero naturale: con 8 bit 39 = Codifica in virgola fissa dei numeri float: si alloca un numero prefissato per parte intera e frazionaria Esempio: due byte, uno per parte intera, uno per frazionaria: 39.345 =. conversioni di numeri rappresentati con codifica binaria (posizionale) - base decimale binaria - per la parte intera e frazionaria parte intera da decimale a binaria: serie di divisioni per, si prendono i resti 39 9 9 4 da binaria a decimale: moltiplicare cifre per potenze di : ) = + + + 3 + 4 + 5 = ) = 39) = + + 4 + + + 3 = 39 39) = ) - -
parte frazionaria da decimale a binaria: serie di moltiplicazioni per, si prende parte intera dei risultati.345 X.69.69 X.38.38 X.76.76 X.5.5 X.4.4 X.8.8 X.6 NB: il processo può non terminare: si ottiene un approssimazione da binaria a decimale: moltiplicare cifre per potenze negative di :.) = - + -4 + -5 = =.5 +.65 +.35 =.34375.) =.34375).345).) - -
Somma tra numeri naturali con codifica binaria posizionale: esempio con 4 bit 9 + => + 5 = => = 4 => + => + 7 = => = 8 => () riporto Immaginiamo numeri naturali binari disposti in circolo valore del numero codificato = angolo orario sulla verticale Somma tra numeri rappresentabile come somma tra angoli Superando valore massimo rappresentabile si ricomincia il giro generando un riporto 4 5 + => + 3 3 7 = => = 8 => () 5 4-3 - 9 8 7 6
Rappresentazione dei numeri interi (relativi) Codifica in modulo e segno: con N bit - un bit dedicato al segno (e.g., per valori, per valori ) - N bit dedicati al modulo, codificato con codifica pesata dei numeri naturali rappresentabili N valori diversi, perché ha due codifiche diverse: da N a + N - piccolo spreco di una configurazione - Ostacola realizzazione circuitale delle operazioni algebriche (non lo mostriamo) Codifica in complemento a Date N cifre binarie, disponibili N configurazioni distinte: di queste N- per valori, N- valori < con N bit rappresentati tutti i valori P, con - N- P N- - esempio, N = 4 6 configurazioni distinte, valori : da a N- - cioè da a 7 valori < : da - a - N- cioè da - a -8 N=6 da -3 a +3 N=7 da -64 a +63 N=8 da -8 a +7 N= da -5 a + 5 N=6 da -3.768 a +3.767 N=3 da -... a +... - 4 -
La rappresentazione in complemento a su N bit: codifica in binario posizionale P P in cpl = P su N bit primo bit = P < P in cpl = ( N P ) su N bit primo bit = proprietà vantaggiose: - un solo valore per lo, nessuna configurazione sprecata dalla codifica - il primo bit indica il segno del numero codifica in binario (posizionale) della parte mancante a raggiungere N : complemento, come in insiemistica = parte mancante a NB: bit più significativo (a sinistra) indica il segno ( valore, valore < ) ma non è il segno: cambiandolo non si ottiene il numero opposto - 5 -
Esempio: codifica su 4 bit, -8 P 7 - - -3 3-4 4-5 -6-7 -8 7 6 5 In cpl facile ottenere codifica di un numero negativo da quella del suo opposto Esempio: codifica in complemento a del numero 56 con bit si trasforma 56 in binario naturale: 56 = 56 (in binario naturale) 56 8 4 7 3 oppure, in alternativa, passando attraverso il complemento a (fare la sottrazione da, equivale a inversione di tutte le cifre), e aggiungere. In modo equivalente: inverti tutti i bit della rappresentazione in binario del valore assoluto, poi partendo da destra inverti tutti i bit fino al primo zero incluso => + - 6 -
In cpl operazione di somma si realizza come nella rappresentazione binaria posizionale Ma occorre ignorare il riporto e fare attenzione ai casi in cui si ottiene valore fuori dall intervallo rappresentabile Questo succede quando ) addendi dello stesso segno e inoltre ) segno del risultato segno degli addendi Si introduce BIT DI OVERFLOW, = se e solo se valgono le condizioni ) e ). Tutto questo permette di realizzare la sottrazione mediante addizione del minuendo e dell opposto del sottraendo Si può usare un solo circuito per addizione e sottrazione, a patto di disporre di un (peraltro semplicissimo) circuito per ottenere il numero opposto (codificato in cpl) di uno dato Esempi: N=4 bit tra () bit di riporto, tra [] bit di overflow -3 => -4 => -7 => []() -3 => +6 => +3 => []() -4-3 -5 - -6 - -7-8 7 6 3 5 4 + => +5 => +7 => []() -3 => -7 => - => []() -8 => +6 => - => []() +3 => +6 => +9 => []() overflow, risultato errato - 7 - overflow, risultato errato
codifica in virgola mobile (floating point) Del tutto simile a cosiddetta notazione scientifica o esponenziale Per rappresentare in modo compatto numeri molto piccoli o molto grandi e.g. massa dell elettrone è 9.95 3 Kg separate parti che descrivono - ordine di grandezza (potenza di una data base: -3 ) - precisione con cui è noto il valore (cifre significative: 9.95) Ogni numero razionale R esprimibile come segue R = (±) N b E N numero, con parte intera e parte frazionaria b - base b > E - esponente intero con segno (i.e., positivo, nullo o negativo) tipicamente N ed E sono rappresentati separatamente, con gruppi di bit distinti A parità di precisione, numero di cifre dopo la virgola può cambiare giocando sull esponente e.g.:,6789345 5 = 6,789345 3-8 -
Numero in virgola mobile detto normalizzato se nella parte N virgola posta subito a dx della prima cifra e.g.:,6789345 5 NON normalizzato 6,789345 3 NORMALIZZATO Forma normalizzata vantaggiosa se numero cifre (i.e., bit) disponibili per rappresentare N è limitato permette di evitare zeri iniziali inutili e.g.: avendo a disposizione per N solo cifre si ottiene,67893 5 oppure 6,789345 3 la seconda chiaramente più vantaggiosa: tutte le cifre sono significative Standard IEEE 754-985 Quattro diversi formati, differiscono nel numero totale dei bit utilizzati Quelli più diffusi: - precisione singola: 3 bit - precisione doppia 64 bit - precisione tripla 8 bit Rappresentazione divisa in tre parti: Si assume base b = per il segno ( bit) per N rappresentazione detta mantissa per esponente E rappresentazione detta caratteristica - 9 -
Dettaglio della codifica in precisione singola Segno caratteristica (8 bit) mantissa (3 bit) Codifica complicata dalla necessità di rappresentare alcuni valori particolari - NaN (Not a Number, risultato di operazioni non ammesse, e.g., /) - + e - (e.g. in matlab 3/=inf) - Il valore (meno banale di quanto sembri ) Soluzione: usate due configurazioni estreme della caratteristica e per questi valori speciali Rappresentazione del segno dell esponente: 54 configurazioni da a considerate rappresentazioni dei numeri da a 54 (codifica posizionale) Si fa in modo che le 54 configurazioni (valori da a 54) rappresentino intervallo di valori dell esponente (quasi) esattamente centrati sullo usando Notazione eccesso K : la caratteristica memorizza il valore dell esponente aumentato di K Se caratteristica ha k bit allora si sceglie K = k- - e.g., con k=8 si memorizza esponente aumentato di K = 7 = 7 - -
caratteristica = 5 esponente rappresentato = +3 caratteristica = 8 esponente rappresentato = -47 caratteristica = 3 esponente rappresentato = +5 N rappresentato in forma normalizzata. NB: in binario solo due cifre cifra prima della virgola sempre lasciata sottintesa i 3 bit della mantissa rappresentano solo la parte frazionaria di N in forma normalizzata Casi particolari NaN caratteristica 55 e mantissa qualsivoglia (NB: molte possibili rappresentazioni) + bit di segno, caratteristica 55 (), mantissa () - bit di segno, caratteristica 55 (), mantissa () bit di segno qss, caratteristica, mantissa ( due rappresentazioni, come se ci fossero + e -) - -
Quadro riassuntivo c m m NB v = v = (-) S -6.m c 54 v = (-) S c-7.m 54 55 v=+ s= s= v=- v = NaN Rappresentazione di numeri molto piccoli in valore assoluto La forma normalizzata ( prima della virgola) impedisce rappresentazione valori v con v < -7 con c= si assume.m invece di.m così si possono usare anche i bit della mantissa per rimpicciolire È quasi come dividere per per avere continuità nei valori rappresentati si moltiplica per -6 - -
Esempio di rappresentazione in precisione singola v = 4.6875 =. =. 5 Si ha s = ( bit) c = 5 + K = 5 + 7 = 3 = (8 bit) m = (3 bit) rappresentazione è giustapposizione di s, c, ed m: - 3 -
PROPRIETÀ FONDAMENTALE DELLA CODIFICA NB. I circa 4 miliardi di configurazioni (usati 3 bit) consentono di coprire un campo di valori molto ampio grazie alla distribuzione non uniforme per numeri piccoli in valore assoluto valori rappresentati sono «fitti», per numeri grandi in valore assoluto valori rappresentati sono «diradati» Approssimativamente gli intervalli tra valori contigui sono: per valori di l intervallo è di un millesimo per valori di milioni l intervallo è di un unità per valori di miliardi l intervallo è di mille ecc. - +? Perché? Si può dare una semplice spiegazione, basata sul numero dei bit allocati per mantissa - 4 -