Richiami su alcuni aspetti della rappresentazione dei numeri nei sistemi di elaborazione e di calcolo automatico. Paolo Lepora Dipartimento di Matematica, Politecnico di Torino Politecnico di Torino, Dipartimento di Matematica, Stampato : 15 maggio 2002 Indice 1 I RAPPRESENTAZIONE DEI NUMERI 1.1 1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1.1 cenni storici . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 Rappresentazione non Posizionale . . . . . . . . . . . . . . . 3 1.3 Rappresentabilitá di un numero . . . . . . . . . . . . . . . . . 5 1.3.1 . . . . . . . . . . . . . . . 5 Rappresentabilià dei numeri, Rappresentazione dei numeri . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.3.3 Algoritmo della divisione . . . . . . . . . . . . . . . . 6 1.3.4 Cifre necessarie per un numero . . . . . . . . . . . . . 11 I numeri frazionari . . . . . . . . . . . . . . . . . . . . . . . . 14 1.3.2 1.4 valore r della radice di N 2 Conversioni di Base 2.1 2.2 2.3 15 conversione alla base 10 . . . . . . . . . . . . . . . . . . . . 15 schema di Horner . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.2.1 17 Conversione della parte frazionaria . . . . . . . . . . . Conversione dalla BASE 10 . . . . . . . . . . . . . . . . . . 18 2.3.1 conversione della parte frazionaria . . . . . . . . . . . 19 2.3.2 osservazioni . . . . . . . . . . . . . . . . . . . . . . . . 20 rk 2.4 Conversioni da base r a con k intero positivo . . . . . . . . 22 2.5 numeri con Segno . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.5.1 Modulo e segno . . . . . . . . . . . . . . . . . . . . . . 24 2.5.2 Complemento alla base diminuita . . . . . . . . . . . . 25 2.5.3 Rappresentazione in complemento alla base . . . . . . 27 2.5.4 Algoritmi per complementazione . . . . . . . . . . . . 29 2.5.5 Intervallo di rappresentazione . . . . . . . . . . . . . . 30 2.5.6 Raffronto tra i vari metodi (per la base 2) . . . . . . . 31 i ii 3 Aritmetica FRAZIONARIA 3.1 Virgola Fissa . . . . . . . . . . . . . . . 3.2 Virgola mobile . . . . . . . . . . . . . . 3.2.1 Mantissa normalizzata . . . . . . 3.2.2 tattamento del segno . . . . . . . 3.3 Intervalli di rappresentazione . . . . . . 3.4 ε macchina . . . . . . . . . . . . . . . . 3.4.1 calcolo teorico di ε macchina . . 3.4.2 Algoritmo per ricavare ε . . . . . 3.5 Parametri in un sistema Virgola mobile 3.5.1 polarizzazione . . . . . . . . . . . 3.5.2 Hidden bit . . . . . . . . . . . . 3.5.3 La rappresentazione dello zero . 3.5.4 Segno del numero . . . . . . . . . 3.5.5 Valori attribuiti ai parametri . . INDICE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 33 34 36 36 36 39 40 41 42 43 44 45 45 45 Capitolo 1 I RAPPRESENTAZIONE DEI NUMERI RAPPRESENTAZIONE DEI NUMERI 1.1 1.1.1 Introduzione cenni storici Il concetto di numero, per sua natura primitivo ed astratto, viene usualmente percepito come raggruppamento di entità sensibili: gli oggetti materiali, i segni, le voci del linguaggio. Le regole, le leggi, le tecniche della numerazione, mostrano, nella loro origine uno straordinario grado di universalità che ci consente di vedere come l’atto stesso del numerare sia uno degli attributi caratteristici e fondanti del pensiero umano. La notazione di numero intero risale ad una epoca certamente preistorica. Essa fu collegata inizialmente alla definizione di classi di oggetti indivisibili • Persone in un gruppo • Pecore in un gregge A ciascuna di queste classi, numeri, venne inizialmente attribuita una rappresentazione fonetica non tramandata e non pervenuta. In seguito, con la nascita del linguaggio, venne attribuita una rappresentazione grafica. La nascita del linguaggio realizzava l’associazione tra parola, segno e contenuto quantitativo dei numeri. 1 2 CAPITOLO 1. I RAPPRESENTAZIONE DEI NUMERI Presso popoli diversi, in epoche diverse l’associazione Parola - Segno - Contenuto Quantitativo non fu quasi mai univoca: in lingue diverse, alla stessa entitá ed allo stesso contenuto quantitativo vennero associate parole e segni diversi. Se ad uno stesso contenuto quantitativo posso associare nomi e segni diversi é evidente che occorre distinguere tra le entitá numeri e l’insieme dei simboli e dei nomi chiamati a rappresentarli. La relazione tra un numero e la rappresentazione grafica é del tipo uno a molti, la stessa relazione vale per numero e rappresentazione fonetica. Sulla base delle osservazioni appena fatte si noti inoltre che un numero, nella usa forma scritta potrà sempre essere rappresentato in almeno due modi: il simbolo o l’insieme dei simboli grafici che lo individuano oppure dalla rappresentazione scritta che riporta fedelmente la rappresentazione fonetica. In questo ultimo caso, dei tre elementi numero , rappresentazione grafica e rappresentazione fonetica si potrà prescindere dall’elemento rappresentazione grafica , riducendo a due gli elementi necessari. Questa soluzione, peraltro attraente dal punto di vista speculativo, si mostra essere assai scomoda allorquando si renda necessario esprimere in forma scritta un insieme non piccolissimo di numeri e relazioni tra di essi. Cosı̀ , ad esempio, operando in aritmetica decimale , la semplissima relazione : 1234 + 5678 − 9876 diventerebbe sommare mille duecento trenta quattro a cinque mila sei cento settanta otto e sottrarre nove mila otto cento settanta sei Uno studio razionale della numerazione deve operare una distinzione tra numerazione strumentale, numerazione parlata e numerazione scritta. Poichè questo tipo di approfondimento esula dagli scopi di queste note ci soffermeremo unicamente su alcune semplici tecniche di numerazione. 1.2. 1.2 RAPPRESENTAZIONE NON POSIZIONALE 3 Rappresentazione non Posizionale La rappresentazione primitiva usa la tecnica della ripetizione del simbolo ideografico dell’oggetto. Questo tipo di rappresentazione non necessita alcuna spiegazione ed è immediatamente capita in ogni cultura. Pur non essendo efficente, essa viena ancora oggi usata. I punti sulle facce dei dadi, i numeri sulle tavolette del Domino, alcuni tipi di carte da gioco sono esempi di tali tecniche. Ai primordi della storia della grecia antica si trovano tracce di sistemi di numerazione che designavano i numeri con tanti tratti di linee parallele. Un primo miglioramento si realizza con l’attribuzione di speciali valori numerici ad alcuni simboli. Cosı̀ nella numerazione detta Romani si usano alcuni simboli ed alcune convenzioni I, V, X, L, C, D, M I 1 II 2 III 3 IIII 4 IV V 5 VI 6 V II 7 V III 8 V IIII 9 IX X 10 Il rappresentare i primi dieci elementi con tecniche Romane o moderne, non appare come un sensibile miglioramento! Un fondamentale miglioramento é dato dal passaggio da una numerazione in cui il valore della entitá numero non dipende dalla posizione ad una numerazione in cui il valore dipende dalla posizione Sia N un generico intero non negativo, Sia dn−1 , dn−2 , dn−3 , ..., d2 , d1 , d0 l’insieme dei simboli grafici usati per la rappresentazione. Potremo scrivere: 4 CAPITOLO 1. I RAPPRESENTAZIONE DEI NUMERI N = dn−1 dn−2 dn−3 ...d2 d1 d0 Questa scrittura suggerisce la possibilità di pensare le singole cifre dn−1 , dn−2 , ..., di , ...d0 come dipendenti dalla specifica posizione i occupata nella rappresentazione del numero N . Accettando questa ulteriore ipotesi si potrà parlare di: N= dn−1 dn−2 dn−3 ...d2 d1 d0 | {z } RAPPRESENTAZIONEPOSIZIONALE È ovvio che dalla ultima ipotesi cui si è fatto cenno discende la necessità di stabilire, per ogni posizione i un peso pi . Il valore corrispondente alla rappresentazione N = dn−1 dn−r ...d3 d2 d1 d0 sará quindi dato dalla N = dn−1 · pn−1 + dn−2 · pn−2 + ... + d3 · p3 + d2 · p2 + d1 · p1 + d0 , ovvero, utilizzando una presentazione più compatta: N= n−1 X di · pi i=0 La possibilità ora mostrata, ancorchè molto potente, soffre, per cosı̀ dire di un eccessivo numero di gradi di libertà. Si nota immediatamente che la rappresentazione di uno stesso numero N , potrebbe essere fatta in infiniti modi diversi. Si tratta quindi di limitare nel sistema usato il numero dei gradi di libertá. Se stabiliamo che i pesi pi , anziché essere arbitrariamente assegnati siano dati dalla pi = r i con i ∈ [0, n − 1] 1.3. RAPPRESENTABILITÁ DI UN NUMERO 5 allora, il valore corrispondente alla rappresentazione sará dato dalla dn−1 · rn−1 + dn−r · rn−2 + ... + d3 r3 + d2 r2 + d1 r1 + d0 r0 questo sistema di definizione dei pesi é caratterizzato dall’elemento r , che prende il nome di radice e dal valore dell’esponente attribuito alla radice r, preso pari alla posizione che la cifra che la cifra occupa nel numero. 1.3 Rappresentabilitá di un numero L’interesse per quanto visto sino ad ora ci spinge a porci alcune domande: • Come posso scegliere il valore della radice? • Una volta scelto il valore di radice, quali numeri posso rappresentare? • Come faccio a determinare la rappresentazione cercata? • La rappresentazione trovata, è unica? Vedremo di dare risposta alle questioni sopra riportate procedendo nello stesso ordine : 1.3.1 valore r della radice di N Il primo problema da affrontare é pertanto il seguente: Quali valori sassegnare ad r. Limitando le nostre considerazioni all’insieme dei numeri interi, si può osservare che non sono emerse sino ad ora limmitazioni ai valori che si possono assegnare ad r. È doveroso notare però che 1. la scelta di un valore r = 0 non consente alcuna rappresentazione di N. 2. la scelta di un valore r = 1 riconduce ad un sistema di numerazione non posizionale. Sarà pertanto opportuno evitare la scelta dei valori r = 0 e dei valori r = 1. Ragioni di opportunità ci consentiranno inseguito di suggerire una limitazione superiore ai valori da attribuire ad r. 6 CAPITOLO 1. I RAPPRESENTAZIONE DEI NUMERI 1.3.2 Rappresentabilià dei numeri, Rappresentazione dei numeri Il secondo problema che affrontiamo ci permetterà di rispondere in una, alle seguenti domande: • Una volta scelto il valore di radice, quali numeri posso rappresentare? • Come faccio a determinare la rappresentazione cercata? • La rappresentazione trovata, è unica? Dimostreremo che: Dato un intero N ed una radice r • 1. É possibile rappresentare N come N= n−1 X di r 1 i=0 2. La rappresentazione é unica ? 1.3.3 Algoritmo della divisione Per la dimostrazione del teorema precedentemente enunciato dobbiamo ricorrere al seguente algoritmo, detto algoritmo della divisione. Teorema 1 Siano m ed n due interi, sia inoltre m ≥ 0 ed n > 0 Th) esistono e sono unici 2 interi q con q≥0 che chiameremo quoziente e p con 0 ≤ p < n che chiameremo resto, tali che m = nq + p Partiamo dalla successione 0, 1, 2, 3, 4... , ordinata e crescente : 0 < 1 < 2 < 3... s 1.3. RAPPRESENTABILITÁ DI UN NUMERO 7 notiamo che anche la successione 0 < n < 2n < 3n < 4n < 5n... s0 é ordinata e crescente. Poichè non sappiamo se m coincide con un elemento della s’, studieremo separatamente i due possibili casi 1. m coincide con un elemento della successione s’ 2. m non coincide con un elemento di s’ ed é quindi compreso fra 2 elementi della successione s’ nel 1◦ caso si avrá m = qn ⇒ p = 0 : e pertanto m − qn = 0 = p nel 2◦ caso si avrá qn < m < (q + 1)n da cui, sottraendo il valore qn, si ottiene: 0 < m − qn < n ponendo p = m − qn avró 0<p<n infatti 0 < m − qn = p < n il che dimostra l’esistenza di p e q. Dimostreremo l’unicitá ammettendo che esistano altri due interi q ∗ e p∗ tali che m = q ∗ n + p∗ d’altra parte noi sappiamo che m = qn + p Inoltre, per ipotesi, deve essere 0≤p<n e 0 ≤ p∗ < n 8 CAPITOLO 1. I RAPPRESENTAZIONE DEI NUMERI e quindi 0 ≤ p = m − qn < n e 0 ≤ p∗ = m − q ∗ n < n e quindi ancora qn ≤ m < (q + 1)n e q ∗ n ≤ m < (q ∗ + 1)n Il che significa che m dovrà cadere nell’intervallo qn . . . (q + 1)n e contemporaneamente m dovrà cadere nell’intervallo q ∗ n . . . (q ∗ + 1)n D’altra parte, m, che é unico, non puó cadere in 2 distinti intervalli della successione s’. Questa osservazione ci consente di concludere che dovrá necessariamente essere q = q ∗ ed essendo p = m − qn e p∗ = m − q ∗ n, anche p = p∗ . Possiamo ora procedere alla dimostrazione del teorema precedentemente annunciato. Teorema 2 Dato un intero N ed una radice R > 1 1. É possibile individuare i coefficienti dn−1 , dn−2 ...d1 , d0 di un polinomio avente grado n tali che N = dn−1 · rn−1 + dn−2 · rn−2 + ... + d1 · r + d0 . con la condizione 0 ≤ di < r i ∈ [0, n − 1] 2. I coefficienti dn−1 , dn−2 ...d1 , d0 sono unici DIMOSTRAZIONE Sulla scorta dei risultati del teorema precedente, Dividiamo N per R. Otterremo un quoziente N0 ed un resto d0 , con N0 < N e 0 ≤ d0 < R. Ripetendo l’operazione, otterremo N = N0 · R + d0 N0 = N1 · R + d1 N1 = N2 · R + d2 1.3. RAPPRESENTABILITÁ DI UN NUMERO 9 N2 = N3 · R + d3 N3 = N4 · R + d4 Sappiamo inoltre che N > N0 > N1 > N2 > . . . >. Gli interi N, N1 , N − 2, . . . , Ni , . . . formano una successione di interi positivi, decrescenti. Esisterá quindi un valore n tale che Nn = 0 · R + dn+1 A questo punto, procedendo a ritroso, con n sostituzioni otterremo: N = d0 + RN1 N = d0 + R(d1 + RN2 ) N = d0 + R(d1 + R(d2 + RN3 )) N = d0 + R(d1 + R(d2 + R(d3 + R(d4 + ... +... + R(dn−2 + R(dn−1 + 0)))))) N = d0 + d1 · R + d2 R2 + d3 R3 + ...+ +... + dn−2 Rn−2 dn−1 · Rn−1 il che prova l’esistenza. Proveremo l’unicit‘à nel modo seguente: Ammettiamo che oltre ai coefficienti ora trovati, d0 , d1 , d2 ...dn−1 esista un secondo insieme di coefficienti d∗0 , d∗1 , d∗2 ...d∗n−1 Allora potremo scrivere: N = d∗0 + Rd∗1 + d∗2 R2 + d∗3 R3 + ... + d∗n−2 Rn−2 + d∗n−1 Rn−1 ma anche N = d0 + Rd1 + d2 R2 + d3 R3 + ... + dn−2 Rn−2 + dn−1 Rn−1 10 CAPITOLO 1. I RAPPRESENTAZIONE DEI NUMERI Poichè i 2 polinomi hanno lo stesso grado1 , sottraendo membro a membro avremo: 0 = (d∗0 − d0 ) + (d∗1 − d1 )R + (d∗2 − d2 )R2 + ...+ +... + (d∗n−2 − dn−2 )Rn−2 + (d∗n−1 − dn−1 )Rn−1 )Rn−1 supponiamo ora che d∗0 − d0 = 0, d∗1 − d1 = 0...d∗k − dk = 0 per k ∈ [0, j − 1] allora −(d∗j − dj ) = (d∗j+1 − dj+1 )R + ... + (d∗n−1 − dn−1 )Rn−1−j e quindi, d∗j − dj = h = R (d∗j+1 − dj+1 ) + ... + (d∗n−1 − dn−1 )Rn−j−2 i il che significa che d∗j −dj é divisibile esattamente per R e cioé, a meno del segno |d∗j − dj | = q · R conqintero . Sarà inoltre 0 ≤ d∗j < R e 0 ≤ dj < R e pertanto |d∗j − dj | < R − R < d∗j − dj < R e ancora −R < q · R < R Ma allora, avuto riguardo alle 2 relazioni soprariportare, ricordando che q é intero, si deve concludere che l’unica possibilitá é che q ≡ ∅ Posso dunque affermare che d∗j = dj . Per completare la dimostrazione basterà ripetere il medesimo ragionamento per un qualunque j 1 (non é restrittivo supporre che i 2 polinomi abbiano lo stesso grado n. Nel caso ciò non fosse vero,si procederà nel modo seguente: sia n∗ il grado del polinomio avente i coeff. d∗0 , d∗1 , d∗2 ...d∗n∗ −1 , sia n il grado del polinomio avente i coeff. d0 , d1 , d2 ...dn−1 , sia inoltre n∗ < n. Sará sufficiente adeguare il polinomio col grado minore al grado del polinomio di grado maggiore aggiungendo i coefficienti dn∗ +1 = 0, dn∗ +2 = 0, ..., dn−1 = 0 1.3. RAPPRESENTABILITÁ DI UN NUMERO 11 I teoremi precedenti garantiscono la possibilitá di rappresentare un qualsiasi numero N intero, con un polinomio con radice R qualsiasi. Le radici piú usate sono R = 10 , R = 2, R = 8, R = 16 Nel caso R = 10 i simboli usati sono: R = 10 di ∈ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} Nel caso R = 2 i simboli usati sono: R=2 di ∈ {0, 1} Nel caso R = 8 i simboli usati sono: R=8 di ∈ {0, 1, 2, 3, 4, 5, 6, 7} Nel caso R = 16 i simboli usati sono: R = 16 1.3.4 di ∈ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F } Cifre necessarie per un numero Determineremo ora il numero di cifre necessarie per rappresentare un numero N in un sistema posizionalea base fissa R. Per raggiungere quasto scopo risolveremo inizialmente un problema leggermente diverso: il massimo numero rappresentabile con n cifre. il massimo numero rappresentabile con n cifre. Teorema 3 Dato un sistema di rappresentazione con n cifre nella base R, Th) Il massimo numero rappresentabile Nmax,n vale Nmax,n = Rn − 1 Dimostrazione Sia N= n−1 X di r i i=0 con 0 ≤ di < r 12 CAPITOLO 1. I RAPPRESENTAZIONE DEI NUMERI Il numero N assumerà il massimo valore rappresentabile con n cifre allorquando le singole cifre di assumeranno ciascuna il massimo valore possibile , e cioè quando di ≡ di,max ∀i ∈ {0, 1, ..., n − 1} ma per le ipotesi fatte, di,max ≡ r − 1 ∀i ∈ {0, 1, ..., n − 1} e pertanto, sostituendo, Nmax,n = n−1 X (r − 1)ri i=0 N = (r − 1)rn−1 + (r − 1)rn−2 + ...+ +... + (r − 1)r2 + (r − 1) · r + r − 1 = = rn − rn−1 + rn−1 rn−2 + ... + −r2 + r2 − r + r − 1 = = rn − 1 Il che ci permette di concludere che Nmax,n = rn − 1 Numero di cifre necessarie per rappresentare N La relazione precedentemente trovata, che mette in relazione il valore Nmax,n , massimo numero rappresentabile, coi valori n, numero di cifre dedicate alla rappresentazione del numero e con R, valore della base di rappresentazione adottata ci permette di risolvere il problema posto inizialmente. Teorema 4 Sia dato il numero N , rappresentato nella base R. Th) Il numero di cifre necessarie per rappresentare N è dato dalla seguente relazione: n = dlogr (N + 1)e Dalla relazione ricavata nel precedente teorema, Nmax,n = rn − 1 1.3. RAPPRESENTABILITÁ DI UN NUMERO 13 si ottiene, passando ai logaritmi: n = logr (Nmax,n + 1) se invece di n cifre, si userasero n − 1 cifre, avremmo dal teorema precedente: Nmax,n−1 = rn−1 − 1 rn−1 = Nmax,n−1 + 1 e quindi n − 1 = logr (Nmax,n−1 + 1) Tutti i numeri compresi fra Nmax,n−1 < N ≤ Nmax,n sono rappresentabili con n cifre rn−1 − 1 < N ≤ rn − 1 rn−1 < N + 1 ≤ rn n − 1 < logr (N + 1) ≤ n e quindi n = dlogr (N + 1)e avendo indicato con il simbolo d per eccesso all’intero superiore e il valore che si ottiene arrotondando 14 1.4 CAPITOLO 1. I RAPPRESENTAZIONE DEI NUMERI I numeri frazionari NUMERI FRAZIONARI In un sistema posizione a base fissa r un numero N frazionario viene rappresentato da una successione di cifre dj con 0 ≤ dj < r N = dn−1 dn−2 ...d2 d1 d0 .d−1 d−2 d−3 ...d−m Questa rappresentazione corrisponde al valore N = dn−1 · rn−1 + dn−r · rn−2 + ... + d3 r3 + d2 r2 + d1 r1 + d0 r0 + d−(m−1) d−m d−1 d2 + + ... + + m r1 r2 rm−1 r ovvero, in notazione più compatta + N= n−1 X −m X di r i + i=0 N= dj · rj j=−1 n−1 X di r i i=−m avendo indicato con n il numero di cifre della parte intera e con m il numero di cifre della parte Frazionaria Osservazione: la cifra piú a sinistra dn−1 é associata al peso rn−1 ; la cifra piú a destra dm é associata al peso r−m . la cifra a sinistra, avendo il peso maggiore é detta cifra piú significativa MSD, mentre quella pú a destra ha il peso minore e viene detta cifra meno significativa LSD. Capitolo 2 Conversioni di Base CONVERSIONI DI BASE Per le conversioni di base esistono due classi di algoritmi, differenziate dal fatto di operare nella base di partenza oppure nella base di arrivo: I primi sono utilizzati dagli umani, in generale abituati ad operare nella base 10, per le conversioni dette da base 10 a base qualunque. Essi sono anche utilizzati dagli automi per operare conversioni dalla loro base di lavoro (usualmente la base 2 o la base 8 o la base 16) ad altre basi). Gli algoritmi che operano nella base di arrivo, come è facile arguire, vengono usati dagli umani per convertire numeri da una base qualunque a base 10 e dagli automi per convertire numeri da una base qualunque alla loro base di lavoro (solitamente 2 o 8 o 16). 2.1 conversione alla base 10 1) Da base qualunque a base 10 Dato N in base R • Esprimere R in base 10 • Esprimere i coefficienti di nella base 10 • Eseguire le operazioni nella base 10 es.: 325)7 = 3 · 72 + 2 · 71 + 5 · 70 = 147 + 14 + 5 = 166 325.42 = 3 · 49 + 2 · 7 + 5 + 4 · 7−1 + 2 · 7−2 = 166.6122 2 =. . . . + 74 + 49 15 16 CAPITOLO 2. CONVERSIONI DI BASE 2.2 schema di Horner Il procedimento indicato ha il vantaggio di essere estremamente semplice. Esso presenta tuttavia alcuni svantaggi che si manifestano allorquando ci si proponga di rendere procedurale la conversione. Nel metodo ora visto si dovranno dapprima calcolare i valori delle potenze della base memorizzandoli in opportune locazioni di memoria. Si calcoleranno in seguito le somme dei prodotti tra le singole cifre dk ed i valori memorizzati delle potenze rk , per k ∈ {n − 1, n − 2, ..., 2, 1, 0}. Se si volesse evitare di utilizzare n locazioni di memoria per la registrazione dei valori delle potenze della base, si dovrebbe ricorere al calcolo delle potenze stesse ad ogni passo della procedure e quindi si dovrebberero effettuare molte operazioni in piú di quelle strettamente necessarie. Lo schema di Horner consente di dedurre un procedimento di conversione che si presta agevolmente ad essere rappresentato in modo procedurale, non richiede orerazioni ridondanti e non necessita di locazioni di memoria per la memorizzazione di risultati intermedi del calcolo. Sia N = dn−1 ...d1 d0 che corrisponde, in modo esplicito a: N = dn−1 · rn−1 + dn−r · rn−2 + ... + d3 r3 + d2 r2 + d1 r1 + d0 r0 Rifacendoci alle osservazioni fatte per la dimostrazione del teorema di esistenza ed unicità, si vede immediatamente che è possibile scrivere l’espressione precedente nel seguente modo: N = (...(((dn−1 )r) + dn−2 )r + dn−3 )r...)r + d1 )r + d0 ) Lo schema di Horner consiste nel calcolo del valore di N , utilizzando la struttura e l’ordine della espressione sopra riportata. In forma procedurale, si opererà come segue: 1. 0 → N 2. Per k che varia da n − 1 a 0 ripeti: 3. 4. Fine N · r + dk → N 2.2. SCHEMA DI HORNER 17 A titolo esemplificativo, vediamo la conversione del numero N espresso nella base 2, nel corrispondente numero espresso nella base 10 11101)2 → .... )10 i singoli passi saranno: 1. N = 0 2. N = N · r + d4 = 0 · 2 + 1 = 1 3. N = N · r + d3 = 1 · 2 + 1 = 3 4. N = N · r + d2 = 3 · 2 + 1 = 7 5. N = N · r + d1 = 7 · 2 + 0 = 14 6. N = N · r + d0 = 14 · 2 + 1 = 29 7. Fine 2.2.1 Conversione della parte frazionaria Anche per la conversione della parte frazionaria si procederà allo stesso modo: F = −m X dj · rj j=1 rappresentato come 0.d−1 d−2 . . . d−m 0. . . . d−1 · r−1 + d−2 · r−2 + d−3 · r−3 + . . . d−m · r−m r−1 (d−1 + r−1 (d−r + r−1 (d−3 + . . . r−1 (d−m ) . . .)) Ṽm = Ṽm−1 = Ṽm−2 = Ṽk = .. . d−m Ṽm · r−1 + d−(m−1) Ṽm−1 · r−1 + d−(m−2) Ṽk+1 · r−1 + d−k F = Ṽ1 · r−1 18 CAPITOLO 2. CONVERSIONI DI BASE CONVERTIRE 0.10101 Ṽ5 Ṽ4 Ṽ3 Ṽ2 Ṽ1 Ṽ0 2.3 = = 1 · r−1 + 0 = 1/2 + 0 = = = = = 1 1 2 1 −1 + 1 = 1 + 4 = 5 2 ·r 4 4 5 5 −1 + 0 = 5 · r 4 8 5 −1 + 1 = 5 + 1 = 21 · r 8 16 16 21 −1 = 21 = 0.65625 · r 16 32 Conversione dalla BASE 10 CONVERSIONE DA UN SISTEMA A BASE 10 AD UN SISTEMA A BASE QUALSIASI Direttamente dalla dimostrazione della esistenza ed unicitá si ha N= n−1 X i di · r = "n−1 X i=0 e quindi , ponendo N1 = # (di · r i−1 ) · r + d0 i=1 "n−1 X # (di · r i−1 ) si potrà scrivere i=1 N = N1 · r + d0 La stessa procedura, ripetuta, conduce alla seguente successione N= N1 = N2 = .. . N1 · r + d0 N2 · r + d1 N3 · r + d2 Nj−1 = Nj · r + dj−1 Nn−1 = Nn · r + dn−1 avendo posto il termine generale n−(j−1) Nj−1 = X i=(j−1) (di · ri−(j−1) ) 2.3. CONVERSIONE DALLA BASE 10 19 È facile vedere che la successione N ; N1 ; N2 ; ...; Nn−1 ; Nn è decrescente e che Nn = 0. Il calcolo si arresta quindi dopo n passi. Vediamo alcuni esempi di conversione Convertire 27)10 → xxxx )16 27 : 16 = 1 · 16 + 11 → d0 1 : 16 = 0 · 16 + 1 → d1 ) → 1B 27)10 → xxxx)2 27 : 2 = 13 : 2 = 6:2= 3:2= 1:2= 2.3.1 13 · 2 + 1 6·2+1 3·2+0 1·2+1 0·2+1 → d0 → d1 → d2 ⇒ 11011 → d3 → d4 conversione della parte frazionaria PER LA PARTE FRAZIONARIA SI HA −m X F = dj · rj = d−1 · r−1 + d−r · r−r + j=−1 +d−3 · r−3 + . . . d−m · r−m moltiplicando per la base r otterremo r · F = d−1 + d−2 · r−1 + d−3 · r−2 + . . . d−m · r−m+1 = d−1 + Ṽ−1 avendo posto Ṽ−1 = −m X dj · rj+1 la moltiplicazione di F per la base r j=−2 mette in evidenza una parte intera d−1 ed una parte frazionaria Ṽ−1 Potremo pertanto scrivere 20 CAPITOLO 2. CONVERSIONI DI BASE br · F c = d−1 Per Ṽ−1 opereremo come per F ed otterremo br · Ṽ−1 c = d−2 .. . r · V−j+1 = d−j 2.3.2 osservazioni Vediamo alcune osservazioni: (a) Come posso affermare che dopo ogni passo esiste una parte intera ed una frazionaria? Al passo k si avrá rṼ−k = d−(k+1) + Ṽ−k+1) poiché 0 ≤ d−(k+1) < R ⇒ ∃ parte intera. Vediamo Ṽ−(k+1) Ṽ−k+1 = d−(k+1) · r−1 + d−(k+2) · r−2 . . . d−m rk−m le potenze di r vanno da −1 a −m + k Ci si deve domandare a questo punto se: −m X dj · rk+j ≥1 j=−(k+1) Poniamoci nel caso peggiore:k = 0 e dj = r − 1 −m X ∀j = −1, ..., −m dj · rj = d−1 · r−1 + d−2 · r−2 + . . . d−m · r−m j=−1 se dj = r − 1 −m X dj · r j = (r − 1)r−1 + (r − 1)r2 + . . . + (r − 1)r−m j=−1 = 1 − r−1 + r−1 − r−2 + r−2 + . . . − = −r−m+1 + r−m+1 − r−m = 1 − r−m ⇒ < 1 per ogni valore di m. 2.3. CONVERSIONE DALLA BASE 10 21 (b) Operando con m cifre frazionarie, per moltiplicazione, avremo, al termine di ogni passo, ancora m cifre significative per la parte frazionaria. Ciò non ci consente di fare alcuna previsione sul numero di passi da copiere prima che la procedura si arresti. Anzi, potremo dire che la procedura si arresterà solamente nel caso in cui V−j+1 = 0. Ci saranno quindi casi in cui la procedura non si arresta. Viene cosı́ a mancare una delle ipotesi fondamentali per poter definire la procedura descritta un algoritmo (Un algoritmo deve terminare in un numero finito di passi). Si dovrá pertanto prevedere l’arresto dopo che si saranno individuate le cifre frazionarie desiderate. È ovvio che in tutti questi casi, si dovrà accettare un errore di conversione in quanto il valore dopo l’arresto della procedura sarà troncato ad un certo numero di cifre frazionarie,inferiore al numero ci cifre necessarie. Vediamo alcuni esempi CONVERTIRE 0.6875)10 → xxxx)2 0.6875 · 2 = 0.3750 · 2 = 0.75 · 2 = 0.5 · 2 = 1.3750 0.75 1.5 1.0 y 1 + 0.3750 0 + 0.75 1 + 0.5 1+0 e quindi 0.6875)10 ⇒ 0.1011 CONVERTIRE 0.1)10 → xxxx)2 d−1 d−2 d−3 d−4 22 CAPITOLO 2. CONVERSIONI DI BASE 0.1 · 2 = 0.2 · 2 = 0.4 · 2 = 0.8 · 2 = 0.6 · 2 = 0.2 · 2 = 0.4 · 2 = 0.8 · 2 = 0.6 · 2 = 0.2 · 2 = 0.4 · 2 = 0.8 · 2 = 0.2 0.4 0.8 1.6 1.2 0.4 0.8 1.6 1.2 0.4 0.8 1.6 y 0 + 0.2 0 + 0.4 0 + 0.8 1 + 0.6 1 + 0.2 0 + 0.4 0 + 0.8 1 + 0.6 1 + 0.2 0 + 0.4 0 + 0.8 1 + 0.6 ⇒ d−1 ⇒ d−2 ⇒ d−3 ⇒ d−4 ⇒ d−5 ⇒ d−6 ⇒ d−7 ⇒ d−8 ⇒ d−9 ⇒ d−10 ⇒ d−11 ⇒ d−12 e quindi 0.1)10 ⇒ 0.0001100110011001100110011001100110011... 2.4 Conversioni da base r a rk con k intero positivo Nel caso particolare in cui sia richiesta la conversione da base r a rk si possono individuare tecniche di conversione molto interessanti dal punto di vista della semplicitá. Il numero N , nella base R = rk sará : dn−1 dn−2 . . . dj . . . d2 d1 d0 )R0 o, piú esattamente, dn−1 · R0 n−1 + dn−2 · R0 n−2 1 + . . . d1 · R0 + d0 · R0 0 0 ≤ di < R 0 Avendo posto R = rk , potremo sostituire al valore R il valore rk dn−1 · (rk )n−1 dn−2 (rk )n−2 + di (k )i + d1 rk + d0 2.4. CONVERSIONI DA BASE R A RK CON K INTERO POSITIVO23 se esprimiamo di come un polinomio in base r avremo di = Ci,k−1 · rk−1 + Ci,k−2 rk−2 . . . Ci,1 r + Ci,0 sostituendo avremo. ³ ³ ³ ³ ´ Cn−1,k−1 rk−1 + Cn−1,k−2 rk−2 + . . . Cn−1,1 r + Cn−1,0 (rk )n−1 + ´ Cn−2,k−1 rk−1 + Cn−2,k−2 rk−2 + . . . Cn−2,1 r + Cn−2,0 (rk )n−2 + ´ C1,k−1 rk−1 + C1,k−2 rk−2 + . . . C1,1 r + C1,0 (rk )1 + ´ C0,k−1 rk−1 + C0,k−2 rk−2 + . . . C0,1 r + C0,0 (rk )0 = Cn−1,k−1 rkn−k+k−1 + Cn−1,k−2 rkn−k+k−2 + Cn−1,0 rkn−k + Cn−2,k−1 rkn−2k+k−1 + Cn−2,k−2 rkn−2k+k−2 + Cn−2,0 rkn−2k + C1,k−1 rk+k−1 + C1,k−2 rk+k−2 + C1,0 rk + Cn−1,k−1 rkn−1 + Cn−1,k−2 rkn−2 + . . . C0,k−1 rk−1 + C0,k−2 rk−2 + . . . C0,0 r0 Allora si puó concludere che la rappresentazione di N vale: Cn−1,k−1 Cn−1,k−2 Cn−1 , . . . Cn−1,0 Cn−2,k−1 . . . Cn−2,0 , . . . C1,k−1 C1,k−2 . . . C1,1 , C1,0 C0,k−1 C0,k−2 . . . C0,1 , C0,0 La cosa é interessante specialmente per il modo in cui abbiamo generato i coefficienti: Ci,j é dato dalla jesima cifra ottenuta nella rappresentazione di di infatti di = k−1 X Ci,j · rj j=0 e quindi si puo concludere che nelle conversioni da base rk a base r e viceversa sará sufficiente saper convertire le singole cifre espresse in base rk nella corrispondente rappresentazione in base r. Per il caso inverso occorrerá saper convertire gruppi di cifre del numero in base r, presi a gruppo di k cifre a partire da LSB, nelle corrispodenti cifre della base rk . Non é restrittivo supporre che le cifre di N nella base r siano un multiplo itero di k. Se cosı́ non fosse, basterá aggiungere da sinistra un tante cifre dn+2 = 0, dn+1 = 0 , dn = 0 in modo da esprimere N con un numero di cifre multiplo di k. 24 CAPITOLO 2. CONVERSIONI DI BASE 2.5 numeri con Segno Rappresentazione dei numeri con Segno 2.5.1 Modulo e segno I tutti i sistemi di numerazione, Il modo piú semplice per rappresentare numeri con segno consiste nell’anteporre o nel postporre alla rappresentazione N del numero, 2 simboli speciali che indichino se il valore da attribuire alla rappresentazione sia > o < di ∅ La rappresentazione cui siamo abituati usa normalmente i simboli +e− anche se non é difficile incontrare simboli diversi. Basterá ricordare i simboli CR DB spesso usati in ambito bancario oppure la tecnica di porre tra i simboli ( e ) il numero N quando sia n < 0. NB1: In questo caso + e − sono simboli unari e non hanno nulla a vedere coi simboli + e − visti come operatori binari per somma e sottrazione NB2: Per i calcolatori sarebbe scomodo dover fare ricorso a 2 segni speciali oltre ai 2 giá usati 0 e 1 Si conviene pertanto che (a) La prima cifra (M SD) rappresenti il segno del numero (b) Il valore 0 della prima cifra indicherá N > 0 mentre il valore (R − 1) indicherá numeri N < 0 (c) Le restanti cifre rappresentano il modulo del numero Se N > 0 allora la rappresentazione é: 0|N | = 0dn−2 . . . d1 d0 se N < 0 allora (R − 1)|N | = (R − 1)dn−2 dn−3 . . . d1 d0 Questa rappresentazione é detta: 2.5. NUMERI CON SEGNO 25 MODULO E SEGNO 2.5.2 Complemento alla base diminuita SiaNmax il massimo numero che riesco ad esprimere utilizzando n cifre per la parte intera ed m cifre per la parte frazionaria Nmax = n−1 X i=0 di · r i + −m X dj · r j j=−1 Nmax = (r − 1)rn−1 + . . . r − 1+ +(r − 1)r−1 + (r − 1)r−2 + . . . (r − 1)r−m = rn − rn−1 + rn−1 x + . . . + r − 1 + 1 − r−1 + + . . . + r−m+1 r−m = = rn − r−m Definisco come complemento alla base diminuita N̄(r) = Nmax − N = rn − r−m − N(r) Dove n indica il numero di cifre destinate alla rappresentazione della parte intera e m il numero di cifre destinate alla rappresentazione della parte frazionaria É immediato verificare che se si fa riferimento a numeri interi N̄R sará N̄R = rn − 1 − NR Applicando la definizione n = 3 m = 0 R = 0 N = 27 N̄ = 103 − 1 − 27 = 999 − 27 = 972 N̄ = 972 n = 3 m = 2 R = 10 N = 27.22 N̄ = 103 − 10−2 − 27.22 = 999.99 − 27 − 22 n=5m=0R=2 N = 00101 N̄ = 2| 5{z − 1} −00101 = N̄ = 11111 −00101 = 11010 N̄ = 972.77 26 CAPITOLO 2. CONVERSIONI DI BASE N̄ = 11010 La prima cifra rappresenta ancora il segno ma le cifre n − 2 . . . 0 non rappresentano il modulo del numero! Valore vero N = −dn−1 (2n−1 − 1) + n−2 X di · 2i i=0 se dn−1 = 0 ci si ritrova nello schema ben noto; se invece dn−1 6= 0 allora si dovrá operare con la tecnica sopra indicata. L’operazione che trasforma un numero positivo in un numero negativo é assai semplice: Sia +N = n−1 X di ri con dn−1 = 0 allora −N sará i=0 −N = n−1 X ki r i i=0 con kn−1 = r − 1 ki = d¯i {n − 2, n − 3, . . . 2, 1, 0} e d¯i = (r − 1) − di . Ricordando peró che dn−1 = 0 allora léstressione soprariportata diventa: dn−1 = r − 1 Pertanto sará −N = n−1 X d¯i ri i=0 infatti, dalla definizione N̄ = Nmax − N = rn − 1 − N = = n−1 X n−1 X i=0 n−1 X i=0 (r − 1) · ri − (r − 1 − di )ri i=0 ponendo (r − 1 − di ) = d¯i ⇒ N̄ = n−1 X i=0 d¯i · ri di · ri 2.5. NUMERI CON SEGNO 27 Osservazioni ⇒ La semplicitá operativa circuitale ⇒ Doppia rappresentaione dello zero! ⇒ Per il caso R = 2 il valore vero si ottiene dalla N = −dn−1 · (2n−1 + n−2 X di 2i ) i=0 se dn−1 = 0 ci si ritrova nel caso normale, se invece dn−1 6= 0, per R = 2 dn−1 = 1 e quindi N = −2 n−1 + n−2 X di · 2 i i=0 2.5.3 Rappresentazione in complemento alla base ¯ come complemento di N alla base R la sequenza di cifre Definiamo N̄ ¯ = rk − N con k uguale al numero di cifre dedicato ottenuta dalla N̄ alle rappresentazioni di N N = 027, R = 10 K = 3 ¯ = 103 − 027 = 973 N̄ N = 00101 R = 2 K = 5 ¯ = 25 − 00101 = 100000 − 00101 = 11011 N̄ N = 127 R = 10 K = 3 ¯ = 103 − 127 = 873 → Valore ERRATO poiché , per K = 3, non é N̄ possibile rappresentare 127. ¯ = rn − N si puó dedurre Infatti dalla N̄ 28 CAPITOLO 2. CONVERSIONI DI BASE ¯ N̄ = rn − n−1 X i=0 = = = = rn −1− n−1 X i=0 n−1 X i=0 n−1 X di r i = n−1 X di r i + 1 = i=0 i (r − 1) · r − n−1 X di ri + 1 = i=0 (r − 1 − di ) · ri + 1 = d¯i ri + 1 i=0 per R = 2 n = 5 N = 00011 N̄ = 11100 ¯ = N̄ + 1 N̄ = 11100 + 1 ====== 11101 Ci si deve occupare, anche per le rappresentazioni in complemento alla base della rappresentazione dello zero. Sia N = 000000, sia n = 6 e sia infine N̄ = 111111, allora ¯ = N̄ 111111 + 1 ∗1 000000 | {z } n=6 Ricordando che la scelta di operare con i numeri con n cifre implica che vengano tralasciate le cifre da n + 1 in poi (Piú correttamente si dirá che si opera in aritmetica modulo (2n ), ci consente di concludere che in questo caso non si ha la doppia rappresentazione dello zero. Possiamo infine, a questo proposito, esaminare, vuoi per il complemento alla base diminuita, vuoi per il complemento alla base l’operazione di sottrazione tra 2 numeri D = N − M Vediamo dapprima il caso del complemento alla base 2.5. NUMERI CON SEGNO 29 L’operazione D = N − M puó essere vista come N − M + rn − rn = N + (rn − M ) − rn = ¯ − rn = N + M̄ ¯ = N + M̄ ¯ N − M = N + M̄ Operando invece in complemento alla base diminuita, si avrá: N −M = N − M + rn − 1 − (rn − 1) = = N + (rm − 1 − M ) − rn + 1 = = N + M̄ + 1 In entrambe le situazioni é facile vedere come la tecnica della complementazione sia particolarmente utile per le operazioni aritmetiche di somma e sottrazione. 2.5.4 Algoritmi per complementazione Si riportano due algoritmi: il primo deriva direttamente dalla definizione, il secondo é molto semplice da usare. A ⇒ Dalla definizione: si trova il complemento as 1 e si somma 1 B ⇒ Partendo da LSB, procediamo verso M SB B.1 Lasciare inalterate le cifre fino al primo 1 B.2 Complemento le cifre successivo fino a M SG Esempio algoritmo A N = 01001001110001000 N̄ = 10110110001110111 + 1 ¯ N̄ 10110110001111000 Algoritmo B N = 01001001110001000 ¯ = 10110110001111000 N̄ 30 CAPITOLO 2. CONVERSIONI DI BASE 2.5.5 Intervallo di rappresentazione Sulla scorta delle precedenti osservazioni, siamo ora in grado di fissare con precisione gli intervalli di rappresentazione. Interi senza segno 0 ` − − − a 2n − 1 N ≤ 2n − 1] 2n N ∈ [0, 2n − 1] [0 ≤ Modulo e segno −2n−1 − 1 ` − − − a 2n−1 − 1 Complemento a 1 −2n−1 − 1 ` − − − a 2n−1 − 1 Complemento a 2 −2n−1 ` − − − a 2n−1 − 1 2.5. NUMERI CON SEGNO 2.5.6 31 Raffronto tra i vari metodi (per la base 2) Numero decimale Modulo e segno Complem. alla base dimunita Complem. alla base +7 +6 +5 +4 +3 +2 +1 +0 -0 -1 -2 -3 -4 -5 -6 -7 -8 0011 0110 0101 0100 0011 0010 0001 0000 1000 1001 1010 1011 1100 1101 1110 1111 – 0111 0110 0101 0100 0011 0010 0001 0000 1111 1110 1101 1100 1011 1010 1001 1000 – 0111 0111 0101 0100 0011 0010 0001 0000 – 1111 1110 1101 1100 1011 1010 1001 1000 32 CAPITOLO 2. CONVERSIONI DI BASE Capitolo 3 Aritmetica FRAZIONARIA ARITMETICA FRAZIONARIA L’abituale tecnica di utilizzare un apposito simbolo ( normalmente il carattere <, > o il carattere < . > per rappresentare la suddivisione tra parte intera e parte frazionaria di un numero, non puó essere adottata nei nei registri di un sistema di elaborazione. Si sono dunque elaborate altre tecniche per la rappresentazione di numeri in aritmetica frazionaria. 3.1 Virgola Fissa Virgola Fissa Si conviene di rappresentare il numero come: a) un intero N ∗ b) un fattore di scala P Per il fattore di scala si adottano le seguenti convenzioni: c) il fattore di scala non viene memorizzato d) il fattore di scala é pari ad una potenza della base 33 34 CAPITOLO 3. ARITMETICA FRAZIONARIA e) il fattore di scala non cambia mai durante i calcoli una qualsiasi sequenza assume significati differenti in base al valore del fattore di scala utilizzato. Come si é visto, nella aritmetica intera i numeri rappresentabili su n posizioni sono Rn . Nel caso di interi positivi si ha [0, Rn − 1] nel caso di interi relativi, in complemento alla base si ha [−Rn−1 , Rn−1 − 1] l’uso di un fattore di scala consente, senza mutare il numero degli elementi rappresentabili dal sistema, di operare in aritmetica frazionaria. Purtroppo il fattore di scala, non essendo registrato (memorizzato), non muta e quindi il programmatore, altre a dovrá tener conto della la posizione del punto decimale, dovrá tener conto della possibilitá, tuttaltro che remota, superare, durante l’esecuzione dei calcoli, dei limiti del sistema di numerazione adottato e del fattore di scala prescelto. L’uso della virgola fissa é assai limitativo, complicato per il programmatore e fonte di numerosi errori. Queste ragioni rendono il sistema ora descritto assai poco utilizzato. É necessario poter operare con un fattore di scala variabile 3.2 Virgola mobile Il numero N , sin qui rappresentato da N= n−1 X di r i i=0 viene rappresentato nel modo seguente: a) il segno del numero. b) una quantitá M chiamata mantissa del numero. 3.2. VIRGOLA MOBILE 35 c) un fattore di scala costituito da una base R e da un esponente E N = ±M · RE P X =± −m X dj · r∗j di ri · Rj=0 i=−1 Per di e dj valgono le ipotesi 0 ≤ di < r e 0 ≤ dj < r∗ R = base del numero r = base della mantissa r∗ = base dell’esponente M = mantissa E = esponente Come avviene nell’aritmetica intera M é rappresentata dalla successione di cifre M = d−1 d−2 d−3 . . . d−m E = dp−1 dp−2 . . . d1 d0 Sulla scorta delle ipotesi precedenti, la coppia (M, E) unitamente al segno di M ed al segno di E, rappresentano N Osservazioni: a) nella nE X N =± −n Xm dj · r∗j d − iri · Rj=1 i=−1 a) I valori r ,R ed r∗ possono assumere valori diversi b) Nel caso in cui r, R ed r∗ siano coincidenti si puó fare in modo che la prima cifra delle mantisse sia 6= 0. Ogni spostamento della virgola della M verso destra richiede la diminuzione di una unitá del valore E, inversamente, uno spostamento verso sinistra richiede che il valore di E sia aumentato di una unitá. Ad esempio esempio con r 6= R 6= r∗ 36 CAPITOLO 3. ARITMETICA FRAZIONARIA 0.7432 · 1013 0.007432 · 1015 0.07432 · 1014 3.2.1 Mantissa normalizzata se la prima cifra della mantisa é 6= 0 e cioé d−1 6= 0 si dice che la mantissa é normalizzata Le limitazioni ai valori assunti dalla mantissa saranno quindi: 0 ≤ M < 1 non normalizzata ≤M <1 normalizzata r−1 3.2.2 tattamento del segno La coppia M ed E é vista come numero con segno. Il segno del numero Per quanto riguarda il segno del numero ci connverrá fare riferimento a quanto detto nei paragrafi precedenti per i numeri interi. Tra i 3 possibili metodi utilizzabili, il piú comune, é il metodo detto Modulo e segno. Il segno dell’esponente Per quanto riguarda il segno dell’esponete si usa una tecnica diversa da quelle sin qui esaminate. Tale tecnica, detta di Polarizzazione verrá esaminata in seguito. 3.3 Intervalli di rappresentazione Max valore mantissa 1 − r−nm Min valore mantissa r−nm (non normalizzata) Min valore mantissa r−1 (normalizzata) 3.3. INTERVALLI DI RAPPRESENTAZIONE 37 Max valore esponente > 0 rn−E − 1 Min valore esponente < 0 −(rnE − 1)∗ dipende dalla scelta fatta per E<0 Allora possiamo indicare quali sono gli intervalli che sono utilizzabili coi numeri cosı́ organizzati: 10 caso mantissa normalizzata N GP N GN N LP N LN = (1 − r−nm ) · Rr = −N GP = r−1 · R = −N LP nE −1 20 caso mantissa non normalizzata GP GN LP LN n = (1 − r−nm ) · Rr E −1 = −GP m = r−nm · R(r E −1) = −LP 38 CAPITOLO 3. ARITMETICA FRAZIONARIA Vediamo alcune particolaritá di questa classe di numeri. Non esistono numeri tra N LN e N LP oppure tra LN e LP Ve ne sono invece rnm nell’intervallo N LP ` −−− −−− a R·N LP ma anche nell’intervallo R · N LP ` − − − − −− a R2 · N LP ve ne sono esattamente rnm . Ma questo intervallo é di R volte piú grande del precedente. Questi numeri non solo non sono equispaziati nell’intervallo di esistenza, non sono nemmeno spaziati con progressione lineare: si ha una spaziatura a scatti. Si puó idealmente suddividere l’intervallo N LP N GP in rnE intervalli più piccoli aventi ampiezza che cresce secondo la successione: {R R2 R3 · · · Ri · · · R(r nm −1) } I numeri macchina ricoprono in modo discreto lo spazio dei numeri reali. La loro caratteristica é quella di diradarsi progressivamente coll’aumentare del modulo del numero. All’interno ci ciascuno degli intervalli delimitati dalla successione sopra riportata, i numeri macchina sono equispaziati. In ogni intervallo della successione, vi sono esattamente rnm numeri macchina. Esempio: Ipotesi R = 2 M normalizzata nm = 4 nE = 2 numeri positivi 0.1000 0.1001 0.1010 0.1011 0.1100 0.1101 0.1110 0.1111 00 01 10 11 1/2 1/2+1/16 1/2+1/8 1/2+1/8+1/16 1/2+1/4 1/2+1/4+1/16 1/2+1/4+1/8 1/2+1/4+1/8+1/16 1 1+1/8 1+1/4 1+3/8 1+1/2 1+5/8 1+3/4 1+7/8 2 2+1/4 2+1/2 2+3/4 3 3+1/4 3+1/2 3+3/4 4 4+1/2 4+1 5+1/2 6 6+1/2 7 7+1/2 3.4. ε MACCHINA 3.4 39 ε macchina Quanto visto nella sezione precedente ci permette di fare alcune ulteriori osservazioni. In ogni intervallo della successione: {R, R2 , R3 , · · · Ri , · · · R(r nm −1) } vi sono esattamente rnm numeri macchina. Se invece di studiare il diradamento dei numeri macchina in assoluto studiamo la distanza tra 2 numeri riferita al valore assoluto di uno dei due, troveremo una quantità che non dipende più dall’intervallo considerato. Teorema 5 Nell’intervallo di esistenza dei numeri macchina: N GN ≤ n ≤ N LN ; 0; N LP ≤ n ≤ N GP oppure GN ≤ n ≤ LN ; 0; LP ≤ n ≤ GP il rapporto della distanza tra due numeri macchina consecutivi e l’estremo inferiore dell’intervallo della successione {R R2 R3 · · · Ri · · · R(r nm −1) } cui i 2 numeri appartengono è costante in tutto l’intervallo di esistenza. Siano N1 e N2 i due numeri macchina consecutivi, presi nell’intervallo r(j−1) < N1 < N2 < rj L’ampiezza dell’intervallo sarà χj = rj − r(j−1) = r(j−1) (r − 1) In questo intervallo cadranno esattamente rnm numeri e pertanto la distanza tra un numero ed il successivo sarà data da: ψx = r(j−1) (r − 1) r nm e quindi, il rapporto tra questo valore ed il valore r(j−1) che rappresenta l’estremo inferiore dell’intervallo considerato, risulta essere: E= r(j−1) ·(r−1) rnm (j−1) r 40 CAPITOLO 3. ARITMETICA FRAZIONARIA e pertanto: E = rnm (r − 1) Come è facile vedere, tale valore non dipende dal particolare intervallo utilizzato per il calcolo. Tale valore dipende unicamente dai parametri caratteristici della rappresentazione in Floating point adottati. L’elemento ora individuato costituisce una caratteristica fondamentale dei sitemi di numerazione utilizzati e prende il nome di precisione di macchina o ε macchina. definizione ε é definito come: ampiezza dell’intervallo tra 1 ed il numero macchina immediatamente > 1. Conoscendo i parametri caratteristici del sistema adottato si puó facilmente ricavare il valore di ε. 3.4.1 calcolo teorico di ε macchina Teorema 6 Sia r la base di rappresentazione, sia nm il numero di cifre destinate alla rappresentazione della mantissa del numero. Th) Il valore di ε macchina è dato dalla: ε = r(−nm +1) Dimostrazione Partendo dalla definizione, esprimiamo il valore di 1 e del numero macchina immediatamente > 1; sottrarremo quindi il secondo valore dal primo ottenendo cosı̀ il risultato cercato. Il valore 1 é dato da 0 N1 = r−1 · rr = 1 Il valore immediatamente maggiore sará N1+ = (r−1 + r−nm ) · rr 0 Sottraendo si ottiena: (r−1 + r−nm ) · r1 − r−1 · r1 = 1 + r−nm +1 − 1 = r(1−nm ) e quindi: ε = r(−nm +1) 3.4. ε MACCHINA 3.4.2 41 Algoritmo per ricavare ε Nel caso invece non sia possibile conoscere il valore di ε in modo analitico, (caso assai comune), é possibile determinare il suo valore ricorrendo ad un semplice algoritmo: Si parte da un valore di tentativo tent, molto grande. In un ciclo, con divisioni successive, si dimezza, ad ogni passo, il valore di tentativo; si arresterà il ciclo quando il valore di tent trovato sarà cosı̀ piccolo da non raggiungere, se sommato al valore 1, il primo numero macchina immediatamente > 1. A questo punto tent è certamente inferiore al valore ε cercato. Se ne prende il doppio 2 · tent, ben sapendo che in questo caso il valore sarà certamente approssimato per eccesso. Per uscire dal dilemma: valore approssimato per difetto, valore approssimato per eccesso si ricorre ad un arificio apparentemente inutile in un contesto analitico puro: si somma il valore approssimato per eccesso ad 1 e quindi si sottrae nuovamente 1 a = tent + 1 e quindi tent = a − 1 In realtà, però, non ci si trova ad operare in un contesto analitico puro ma si lavora coi numeri macchina che, per quanto detto in precedenza, non sono densi nell’intervallo. L’operazione tent + 1 potrà soltanto condurre ad un numero macchina, in particolare, al numero macchina approssimato per difetto al valore vero tent + 1. È ovvio che tale numero macchina non potrà che essere il numero macchina immediatamente > 1. Ne discende immediatamente che la successiva sottrazione di 1 dal numero ora trovato, condurrà immediatamente al valore cercato di ε. Procedendo in termini più schematici si ha: (a) Inizio (b) Assegnare ad ε un valore di tentativo (grande) (c) CICLO : ripeti i. Dividere il valore di ε per 2 ii. Sommare al valore trovato il valore 1 42 CAPITOLO 3. ARITMETICA FRAZIONARIA iii. Se il risultato della somma é 6= 1 allora ripeti (d) Raddoppiare il valore di ε (e) Sommare al valore trovato 1 (f ) Sottrarre 1 al valore trovato (g) Fine EP := 10. ↓ → → EP := EP/2. ↑ ↓ ← f also se (1 + EP = 1) ↓ vero ↓ ↓ EP := EP ∗ 2. EX := 1.0 + EP EP := EX − 1.0 3.5 Parametri in un sistema Virgola mobile Vi sono molte scelte possibili tra i parametri che caratterizzano un sistema in virgola mobile: (a) La base R i. la base del numero ii. la base della mantissa iii. la base dell’esponente (b) La Mantissa 3.5. PARAMETRI IN UN SISTEMA VIRGOLA MOBILE 43 i. numero di cifre destinate alla mantissa ii. normalizzazione iii. metodo adottato per il segno della mantissa (c) L’esponente i. numero di cifre destinate all’esponente ii. metodo adottato per il segno dell’esponente (d) Convenzioni per i. il numero 0 ii. il più piccolo numero neq0 iii. il più grande numero rappresentabile Prima di poterci addentrare nelle possibili scelte dei parametri sopra richiamati converrà soffermarci su alcuni aspetti essenziali ad una piena comprensione dei numeri in virgola mobile 3.5.1 polarizzazione Tecnica della polarizzazione. Non abbiamo sino ad ora affrontato esplicitamente il problema della rappresentazione del segno dell’esponente in un sistema virgola mobile. Sebbene le tecniche classiche di rapppresentazione possano essere utilmente applicate, si preferisce, di solito, fare ricorso ad una strategia differente. Anzichè rappresentare esponenti con segno, si preferisce sommare al valore dell’esponente una quantità P tale da avere come effetto la traslazione della rappresentazione dell’esponente in un intervallo 0 ≤ x ≤ EspM ax P prende il nome di fattore di polarizzazione. 44 CAPITOLO 3. ARITMETICA FRAZIONARIA Sia Ev l’esponente vero Sia Ep l’esponente come viene rappresentato: esponente polarizzato Sia P il fattore di polarizzazione allora Ep = Ev + P La scelta del valore da assegnare a P non è particolarmente complessa Poichè si ha −(rnE −1 − 1) < Ev < +(rnE −1 − 1), dovendo necessariamente essere 0 ≤ Ep si deduce immediatamente che P non potrà assumere valori minori di −(rnE −1 − 1); d’altra parte, Ep non potrà assumere valori maggiori di rnE − 1 e quindi, per questa limitazione, P non assumerà valori maggori di rnE − 1 − (rnE −1 − 1) = (rnE −1 )(r − 1) Il vantaggio di questa tecnica consiste nel utilizzare esponenti che assumono valori proporzionali al valore assoluto del numero consentendo quindi di effettuare confronti tra 2 numeri dimenticando che si sta operando con numeri FP. Nel caso di N LP con Ev = min si ottiene Ep = 0. 3.5.2 Hidden bit Nel caso si usino mantisse normalizzate, con R = 2, si potrà fare in modo che il primo bit (MSB) della mantissa sia 6= 0 e quindi d1 = 1 in tal caso é possibile evitare di memorizzare questa cifra ottenendo un miglioramento nella precisione: la rappresentazione é tale da presentare una mantissa con un bit in +, tale tecnica viene chiamata del bit nascosto - Hidden hit. Sulla base di quanto sopra, si possono fare immediatamente le seguenti considerazioni: → Hidden-bit, non muta il range → Hidden-bit, muta εps → Hidden-bit, richiede l’uso di registri con un numero di bit superiore al numero di bit usati per la memorizzazione. 3.5. PARAMETRI IN UN SISTEMA VIRGOLA MOBILE 3.5.3 45 La rappresentazione dello zero Abbiamo sinora evitato di parlare della rappresentazione del numero ZERO Da un punto di vista astratto, appare immediatamente che M = 0 è condizione necessaria e suff. perchè N = 0 M =0→N =0 . L’esponente non ha alcuna importanza ai fini della rappresentazione dello zero. Le osservazioni appena fatte, ci suggeriscono alcune considerazioni: Visto che l’esponente non ha alcun ruolo nella rappresentazione dello zero, ci suggerisce la possibilità di assegnare valori 6= 0 all’esponente per scopi speciali Mentre per un numero intero con o senza segno il valore 0 implica che tutti i bit a 0: di = 0 ∀i = 0, n − 1 per un numero FP N = 0 non richiede che tutti i bit siano zero, essi tuttavia possono esserlo. Si può pretanto parlare di zero sporco e di zero pulito. 3.5.4 Segno del numero Il segno di un numero dipende ovviamente dal segno della mantissa. Sarà sufficente fare riferimento alle considerazioni precedentemente svolte per i numeri interi applicandole alla mantissa. È tuttavia opportuno ricordare che si sta affermando come uno standard di fatto la scelta di fare ricorso alla rappresentazione in Modulo e segno. 3.5.5 Valori attribuiti ai parametri La rappresentazione nm X X= nm X i=1 −i di rM · Rj=0 j cj · rE 46 CAPITOLO 3. ARITMETICA FRAZIONARIA non è completamente definita se non vengono assegnati opportuni valori a tutti i paramentri del sistema Vediamo insieme alcune scelte progettuali legate ad alcuni dei più famosi sistemi di elaborazione di dati. Tipo di elab. n. tot. di bit nE nm rM rE R mant. Ibm - 7090 CDC 6600 CDC 6/7000 PDP11 sing. VAX11 sing. VAX11 doub. VAX11 quad. IBM 370 long Univac 1100 HP 21 MX 36 58 60 32 32 64 128 64 32 48 8 10 11 8 8 8 15 7 11 8 27 47 48 23 23 55 112 56 20 39 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 16 2 2 2 2 2 2 16 2 2 HP 15 TASC. 56 16 39 10 10 10 MS MS MS MS MS MS MS MS Cpl-1 Pol7 Cpl-2 Bcd 3.5. PARAMETRI IN UN SISTEMA VIRGOLA MOBILE 47 Elab. Num. di bit totale Numero bit esp. Radice Rappr. della manti. PDP11 (single) VAX11 double VAX11 quad. IBM 370 long. Univac1100 double HP 21 MX extended AMD 9511 single HP 15 tascab. CDC 6/7000 32 8 p=27 8 p = 27 15 p = 215 7 p = 26 11 2 2 MS MS MS 2 MS 16 MS 2 2 cpl. a1 cpl. a2 cpl. 10 MS 2 cpl. a1 2 MS 80x87 Intel short 64 128 64 32 48 48 56 60 32 8 p = 27 8 p = 27 − 1 16 compl. a 10 11 Ev + 21 0 se ≥ 0 Ev + 21 0 − 1 se < 0 8 p = 27 − 1 2 48 CAPITOLO 3. ARITMETICA FRAZIONARIA Esaminiamo ora, con maggior dettaglio il sistema VAX11 . Questa famiglia di sistemi, prodotti dalla Digital (Casa ormai scomparsa, acquistata da Compaq... a sua volta ormai scomparsa, acquistata da Hewelett-Packard) é strutturata per operare in virgola mobile con 4 tipi differenti di formato: F f ormat 4Byte nE = 8 nm = 23 Df ormat 8Byte nE = 8 nm = 55 Gf ormat 8Byte nE = 11 nm = 52 Hf ormat 16Byte nE = 15 nm = 112 ↓ (nE −1) ) N = (−1)s · 0.1M · 2(E−2 NGP NLP NGN NLN ε F D G H ≡ 1.7 · 1038 0.29 · 10−38 ≡ 0.9 · 1038 0.29 · 10−38 0.610308 0.610−308 0.6104932 0.610−4932 2−23 10−7 2−55 10−16 2−52 10−15 2−122 = 10−33 I gradi di libertá del sistema FP, come si evince con facilitá sia dalla trattazione teorica, sia dalle tabelle precedenti, non solo sono realmente moltissimi, ma sono stati usati dai vari produttori di Hardware, come un metodo di contro-standardizzazione. Sarebbe quindi estremamente auspicabile una definizione, internazionalmente accettata di alcuni valori e/o parametri standard. 3.5. PARAMETRI IN UN SISTEMA VIRGOLA MOBILE 3.5.6 49 Formato IEEE L’Institut of Electrical and Electronic Engineering (IEEE) ha proposto nel 1982 una normativa. Due formati base: singolaprecisione doppiaprecisione (32 (64 bit) bit) Due formati opzionali: single double S E8 precision precision extended extended M23 Double ext. s, 15, 64 S E11 M52 tnt nm nE εps SEMPLICE 32 23∗ 8 −23 2 DOPPIA 64 52∗ 11 2−52 ESTESA 80 64∗ 15 2−63 ∗23 + 1 (hidden hit) ∗ ∗ 52 + 1 (hidden hit) ∗ ∗ ∗64 (no hidden hit) MAX POS MIN POS 2128 2126 21024 21022 216384 216383 50 CAPITOLO 3. ARITMETICA FRAZIONARIA Lo standard IEEE-754 prevede: (a) Mantissa normalizzata nel modo seguente: 1 ≤ M < 2 (b) Esponente polarizzato P = 2nE −1 − 1 N = (−1)1 1.M · 2(Ep −P ) Sulla base delle precedenti ipotesi, si deduce facilmente che • L’esponente polarizzato teorico sará compreso nel seguente intervallo: 0 ≤ Ep ≤ 2nE − 1 • : L’esponente vero teorico, tenendo conto del valore dell’esponente polarizzato, sará: 0 − (2nE −1 − 1) ≤ Ev ≤ 2nE − 1 − (2nE −1 − 1) Lo standard IEEE-754 prevede inoltre che, per motivi speciali vengano esclusi i valori agli estremi e pertanto • L’esponente vero potrá assumere pertanto, i seguenti valori: ³ ´ 2nE −1 − 1 + 1 ≤ Ev ≤ 2nE − 2nE −1 − 1 L’intervallo di rappresentazione diventa di conseguenza Mmin · 2(2 )≤N <M (2nE −1 −1) max · 2 nE −1 −1 e quindi nE −1 −1 ) ≤ N < 2 · 2(2nE −1 −1) 1 · 2(2 Casi speciali Ricordando che per i numeri positivi si ha : N = (−1)2 · M · RE , si potrá affermare che se M = 0 ⇒ N = 0. La cosa é vera sia che E = 0 sia per E 6= 0. Nel secondo caso, tuttavia si dirá che si é in presenza di uno Zero sporco. Esaminiamo quindi compiutamente le possibili configurazioni alla luce della precedente osservazione e tenendo conto della esclusione dei valori estremi dell’intervallo operata dallo standard IEEE-754. Si possono riconoscere i seguenti casi: 3.5. PARAMETRI IN UN SISTEMA VIRGOLA MOBILE M E S 0 0 6 0 = 6= 0 0 6= 0 6= 0 0 0 6 0 = 6= 0 N 2 E −1 2NE − 1 0 0 1 0 1 − − 51 ZERO + ZERO − N >0 N <0 +∞ N AN NON NORMALIZZATO rM = 2, rE = 2, ed r = 2 Mantisse sono normalizzate. Hidden hit Esponente in forma polarizzata con costante di polarizzazione P = 2nE −1 − 1 il valore del numero N nella rappresentazione IEEE 754 é dato dalla N = (−1)2 · 1.M · 2(E−p) mentre nel caso classico si avrebbe: N = (−1)1 · 0.M · 2(E−p) (equivale a compiere uno shift a sinsitra di 1 bit) 52 CAPITOLO 3. ARITMETICA FRAZIONARIA 3.6 Operazioni tra due numeri 3.6.1 Somma tra due numeri interi N1 N1 = n−1 X N2 d1,i · ri i=0 Interi N2 = m−1 X d2,i · ri i=0 Non é limitativo supporre m = n. Se cosi non fosse, si dovrenno esaminare i 2 casi seguenti: se m > n basterá porre d1,i = 0 ∀ n − 1 < i < m. In questo caso anche N1 sará costituito da m cifre. se m < n si porrá d2,i = 0 ∀ m − 1 < i < n ed in questo caso anche N2 sará costituito da n cifre. N1 = d1,n−1 rn−1 + . . . d1,2 · r2 + d1,1 r1 + d1,0 N2 = d2,n−1 rn−1 + . . . d2,2 · r2 + d2,1 r1 + d2,0 N1 +N2 = (d1,n−1 + d2,n−1 ) rn−1 +. . .+(d1,1 + d2,1 )·r +d1,0 +d2,0 Se potessimo garantire 0 ≤ d1,i + d2,i < r − 1 Allora potremmo concludere facilmente N1 + N2 = (d1,n−1 + d2,n−1 ) (d1,n−2 + d2,n−2 ) + . . . + (d1,0 + d2,0 ) Purtroppo, per quanto riguarda d1,i + d2,i le cose non stanno cosı́ ricordano infatti che 0 ≤ d1,i ≤ r − 1 e 0 ≤ d2,i ≤ r − 1 si puó solo concludere che 0 ≤ d1,i + d2,1 ≤ 2(r − 1) esaminiamo i due casi 3.6. OPERAZIONI TRA DUE NUMERI 53 A) 0 ≤ d1,i + d2,i ≤ (r − 1) ed in questo caso, ovviamente non vi sono problemi. B) r ≤ d1,i + d2,i ≤ 2(r − 1) in tal caso pongo d1,i + d2,1 = (r + d∗i ) per cui 0 ≤ d∗ i ≤ r − 1 in tal caso + . . . + (d1,i+1 + d2,1+1 ) ri+1 + (d1,i + d2,1 ) ri = . . . (d1,i+1 + d2,1+1 ) ri+1 + (r + d∗i ) · ri + . . . (d1,i+1 + d2,1+1 ) ri+1 + d∗i · ri + . . . L’aver posto d1,i + d2,i . . . = (r + d∗i ) permettere di assicurare che, in ogni caso, 0 ≤ d∗ i ≤ r − 1 come richiesto. Ci si dovrá pero ricordare che il valore della cifra di posto i + 1 dovrá essere incrementato di una unitá. La cifra che viene sommata alla cifra di posto i+1 prende il nome di riporto. La discussione si puó dire conclusa salvo l’esame del caso con riporto d1,i + d2,i + 1 anche in questo caso si avrá 0 < d1,i + d2,i + 1 ≤ 2r − 1 e quindi si ricade nel caso giá esaminato. 3.6.2 Differenza tra due numeri interi Per quanto riguarda la differenza, senza ripetere quanto giá osservato, si puó dire N1 = n−1 X i=0 d1,i ri N2 = n−1 X i=0 d2,i ri 54 CAPITOLO 3. ARITMETICA FRAZIONARIA N1 − N2 = N1 = d1,n−1 rn−1 + d1,n−2 rn−2 + . . . + d1,1 r + d1,0 N2 = d2,n−1 rn−1 + d2,n−2 rn−2 + . . . + d2,1 r + d2,0 N1 − N2 = (d1,n−1 + d2,n−1 ) rn−1 + . . . + (d1,0 − d2,0 ) ¢ Pn−1 ¡ i = i=0 d1,i − d2,i · N1 − N2 = n−1 X (d1,i − d2,i ) · ri i=0 Anche in questo caso, é necessario mostrare che 0 ≤ d1,i − d2,i ≤ r − 1 Nel caso in cui d1,i ≥ d2,i la condizione soprariportata é dimostrata. Nel caso invece d1,i < d2,i si opera nel modo seguente + . . . + (d1,i+1 − d2,1+1 ) ri+1 + (d1,i − d2,1 ) ri + . . . + . . . (d1,i+1 − d2,1+1 ) + (r + d1,i − d2,i ) ri + . . . + in tal caso, é vero che d1,i < d2,i ma é pure vero che r + d1,i > d2,i e pertanto la δ é determinata. Il resto della dimostrazione continua in perfetta analogia alla precedente. Resta da verificare per completezza che δ∗ 0 ≤ d1,i − d2,i − 1 ≤ r − 1 Basterá osservare che la r + d1,i > d2,1 + 1 in quanto 0 ≤ d2,i ≤ r − i e pertanto 0 ≤ r + d1,i − d2,i − 1 ≤ r − 1che é quanto ?? . 3.6. OPERAZIONI TRA DUE NUMERI 3.6.3 55 Carry (riporto) e Borrow (prestito) L’operazione di spostamento di una quantitá pari a R dalla cifra di posto i verso la cifra di posto i + 1 viene detta Carry L’operazione di spostamento di una quantitá pari a R dalla cifra di posto i + 1 verso la cifra di posto i viene detta Borrow in entrambe le situazioni si opera da LSD verso M SD Purtroppo la tecnica non é esente da complicazioni: per trattare correttamente i casi con complicazioni é necessario operare qualche distinzione operazioni su interi senza segno operazioni su interi con segno É opportuno ricordare che si opera in aritmetica modulo n, su registri con n cifre n=4 R=8 N1 = 4451 N 2 = 4127 Se calcolo la somma N1 + N2 avró 4 1 3 2 1 0 4 4 4 1 5 2 1 7 0 6 0 0 + cé stato carry nelle colonne: 0, 1, 3 ció ha generato una somma di 1 nelle colonne 1, 2, 4. Purtroppo peró la colonna 4 non esiste: il risultato supera la capacitá dei registri In tale situazione si ha una situazione detta di Overflow o Tracimazione 56 CAPITOLO 3. ARITMETICA FRAZIONARIA Al termine di una operazione di somma é opportuno verificare se l’operazione sulla cifra di posto n−1 ha generato carry in tal caso il risultato non é corretto. Per la sottrazione ci si ritrova in una situazione analoga. Nel caso ci sia stata una operazione di borrow per la cifra di posto n − 1. Se, con le regole viste per l’algebra booleana cerchiamo di definire la somma diremo, posto A = B1 + B2 B1 = n−1 X d1,i 2i B2 = i=0 n−1 X d2,i 2i i=0 per quanto riguarda il bit i si avrá b1,i + b2,i ⇒ ai = b1,i + b2,i bi 1 bi 2 0 0 1 1 0 1 0 1 carry 0 1 1 0 0 0 0 1 oltre alla ai = b1,i + b2,i si avrá carry = b1,i · b2,i per la somma, quindi, si deve tenere conto anche del bit di carry che proviene dalla posizione i − 1. La tabella vista precedentemente diventa 3.6. OPERAZIONI TRA DUE NUMERI b1,i b2,i carry,i−1 ai carry,i 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0 0 1 0 0 0 1 0 1 1 1 57 e quindi ai = b1,i + b2,i + carryi−1 Carryi = b1,i · b2,i + carryi−1 · (b1,i + b2,i ) 3.6.4 Moltiplicazione tra due numeri Sono stati sviluppati diversi algoritmi Vediamo l’algoritmo detto della somma e scorrimento. Sia: N1 = n−1 X di r i i=0 e N2 = m−1 X ej rj i=0 P m−1 j N1 · N2 = j=0 ej · r · X = = em−1 · rm−1 · X + em−2 · rm−2 · X+ + e2 · r2 · X + e1 · r1 · X + e0 · r0 · X 58 CAPITOLO 3. ARITMETICA FRAZIONARIA es.128 · 53 = 128· 53 384 ← e0 · 1 · X 6400 ← e1 · 10 · X 6784 L’algoritmo trasforma una moltiplicazione in: A) Moltiplicazioni piú semplici B) Scorrimento verso sinistra C) Somma si noti ancora che A) puó essere vista come una serie di somme. c0 r0 · X = equivale a sommare per c0 volte X ei ri : ci · X ⇒ somma ei volte x ri · [ei x] ⇒ scorrimento di i posti a sinistra. Shift-left. Che cosa accade se si opera con la somma/sottrazione su 2 numeri relativi. A Modulo e sogno. Chiamo s il segno di N1 + N2 chiamo S1 il segno di N1 ed s2 il segno di N2 N1 − N2 1 se S1 s2 s N1 + N2 0 1 0 0 1 1 1 0 0 1 0 1 1 0 |N1 | + |N2 | |N1 | + |N2 | |N1 | − |N2 | |N2 | − |N1 | |N1 | − |N2 | |N2 | − |N1 | |N1 | > |N2 | |N2 | > |N1 | |N1 | > |N2 | |N2 | > |N1 | Le operazioni avvengono solo tra numeri ≥ 0 e quindi valgono le regole giá viste. 3.6. OPERAZIONI TRA DUE NUMERI 59 B) Complemento alla base N = N1 − N2 = N1 + N2 com’é ovvio operazioni di somma o di sottrazione possono, anche in questo caso dare risultati che non appartengono ai numeri rappresentati con n cifre. In questi casi ci si trova in una situazione di overflow. La struttura di questi numeri utilizza la posizioni n − 1 (la nesima cifra) per il segno: se N1 > 0 e N2 > 0 la loro somma puó dare luogo ad un valore 1 nella posizione n − 1 e non da mai carry ma 1 in posizione n − 1 indica che N1 + N2 < 0 il che é impossibile. Per contro, se N1 < 0 e N2 < 0 N1 + N2 puó dare luogo ad un valore 0 nella posizione n − 1 e da sempre, comunque il carri, ma, in relatá non sempre N1 + N2 da trasformazioni. Si puó solamente concludere che il carry non e sufficiente a dare indicazioni circa lo stato di tracimazione. I casi sono i seguenti: Somma N1 N2 CARRY OVERFLOW >0 <0 >0 <0 MAI SEMPRE dipende dipende <0 >0 >0 <0 dipende dipende MAI MAI Le sole informazioni contenute nella tabella precedente non ci consentono di definire tutti i possibili casi. É necessario studiare il carry non solo nella posizione n − 1 ma anche nella posizione n−2 60 CAPITOLO 3. ARITMETICA FRAZIONARIA CARRYn−1 CARRYn−2 OVERFLOW 0 0 1 1 0 1 0 1 NO SI SI NO Possiamo quindi cooncludere che la situazione di Overflow corrisponde a quei casi in cui il carry di posizione n − 1 é diverso dal valore del carry di posizione n − 2 e cioé Cn−1 6= Cn−2 3.6.5 Operazioni di somma e sottrazione Ci occupiamo ora delle operazioni di somma con numeri rappresentati in virgola mobile. Sia: N1 = M1 · RE1 e N2 = M2 · RE2 vogliamo studiare N1 + N2 = N = M1 · RE1 + M2 · RE2 Il metodo consiste nel modificare M fino a rendere gli esponenti E1 ed E2 uguali, a questo punto si puó operare la somma delle mantisse. Si danno alcuni casi: 1) E1 > E2 allora si incrementerá E2 del valore (E1 − E2 ) e contemporaneamente si fará scorrere la virgola a sinistra di (E1 − E2 ) posti per M2 N = M1 · RE1 + M2 · R−(E1 −E2 ) · RE2 · R+(E1 +E2 ) = = M · RE1 + M2 · R−(Ei 1 −E2 ) · RE2 · RE1 · R−E2 ) = h 1 = M1 + M2 R−(E1 −E2 ) · RE1 Spostare la virgola a sinistra di E1 − E2 posti per M2 3.6. OPERAZIONI TRA DUE NUMERI 61 2) E2 > E1 allora N = M1 · RE1 · R−(E2 −E1 ) · RE2 · R+(E2 −E1 ) + M2 · RE2 1 = M1 · RE³1 · R−(E2 −E1 ) · RE2 · R−E ´ + M2 RE2 M1 · R−(E2 −E1 ) + M2 RE2 equivale a spostare la virgola a sinistra di E2 − E1 posti per M2 L’operazione di spostamento del punto decimale verso sinistra consiste, nella aritmetica modulo n a far scorrere verso destra tutte le cifre della mantissa. Lo spostamento di k posti a sinistra della virgola significa lo scorrimento a destra di k cifre. Le cifre d0 , d1 , d2 . . . dk−1 scompariranno ed il loro posto sará occupato rispettivamente dalle dk , dk+1 , dk+2 . . . inoltre, k cifre = 0 andranno ad occupare lw posizioni dn−1 , dn−2 , dn−k . Si osserva immediatamente che per ogni operazione di somma che usi 2 numeri con esponenti diversi, si ha una perdita di informazione. Tale perdita inoltre é proporzionale al |E1 − E2 |. 62 3.6.6 CAPITOLO 3. ARITMETICA FRAZIONARIA interruttore parallelo —– 3.6.7 —– decoder 3.6. 3.6.8 OPERAZIONI TRA DUE NUMERI Flip-Flop RS —- 3.6.9 —- Flip-Flop JK 63 64 3.6.10 CAPITOLO 3. ARITMETICA FRAZIONARIA Rugistro —- 3.6.11 Half Adder Un circuito sommatore puó essere schematizzato nel seguente modo 3.6. OPERAZIONI TRA DUE NUMERI 65 Purtroppo, un sommatore a 2 ingressi non é sufficiente in quanto é necessario tener conto del carry 3.6.12 Full Adder —– 3.6.13 —– Sommatore Parallelo 66 3.6.14 —- CAPITOLO 3. ARITMETICA FRAZIONARIA Sommatore Seriale