05-Quante dita hanno i computer?

05-Quante dita hanno i computer?

O “SÌ” O “NO”

Quando vogliamo comunicare dei dati a un calcolatore, non dobbiamo dimenticare che la sua logica è intrinsecamente binaria: acceso/spento, magnetizzato/smagnetizzato, sì/no, vero/falso, sono gli stati tipici (e i valori logici equivalenti) della maggior parte dei componenti del computer. La memoria centrale, in particolare, sia ai tempi dei vecchi nuclei magnetici che ai giorni nostri, con gli attuali chip in silicio, può essere schematizzata (e, di fatto, è materialmente costituita) da una successione di celle che in ciascun momento possono trovarsi in uno soltanto di due stati fisicamente possibili. Se chiamiamo questi due stati “0” e “1”, ecco che qualunque configurazione della memoria e di sue porzioni diventa interpretabile come una sequenza di “0’ e di “1”, cioè di numeri interi in base 2. Questo significa che quando quelli che vogliamo rappresentare sono proprio numeri interi, il gioco è fatto: senza dovere ricorrere a nessuna ulteriore codifica o interpretazione li ritroviamo direttamente in memoria. E in questo senso che la numerazione in base 2 è la più naturale per un computer: perché è possibile interpretare direttamente le successioni di stati di celle di memoria come numeri interi.

O “1” O “0”

Come già sappiamo, in linea di principio non c’è nessuna differenza a eseguire operazioni aritmetiche in una base anziché in un’altra. In teoria si sarebbe tentati di passare dalla base in cui si deve lavorare alla base 10, con cui  abbiamo maggiore familiarità, per poi riportare il risultato nella base di partenza.
Consideriamo il calcolo:

1112+1012

convertendo in base 10, avremmo:

1112=710 1012=510

poi,eseguendo il calcolo:

710+510=1210

Infine, tornando in base 2:

1210=11002

La verifica che ciascuna delle rappresentazioni in base due corrisponda al numero in questione è semplice e può essere effettuata direttamente, ricordando che in un sistema posizionale, a partire da destra le cifre rappresentano le potenze successive della base (e quindi 11002 = 1´23 + 1 ´22 + 0´21 + 0´20 = 810 +410 = 1210). Naturalmente, esiste un algoritmo generale per passare dalla rappresentazione di un numero in una data base a quella in un’altra ed è quindi possibile delegare queste operazioni ‑ piuttosto tediose, in verità ‑ a programmi per computer opportuni (per scrivere i quali, peraltro, sarà prima necessario studiare bene il problema).
D’ora in poi, per semplicità, ometteremo l’indicazione della base, ovunque questo non generi confusione. 
Per eseguire operazioni in una data base, come addizioni e moltiplicazioni, è molto più pratico costruire le relative tabelline, del tutto analoghe a quelle che vengono insegnate a scuola per i numeri in base 10. È infatti sufficiente sapere sommare o moltiplicare tra di loro i numeri da 0 a 9, che è il caso a cui ci si riconduce sempre col sistema dei riporti.
In base 2. le tabelline di addizione e moltiplicazione sono particolarmente semplici:

 

+

 

0

 

1

 

0

 

0

 

1

 

1

 

1

 

0

 

 

 

0+0=0

 

0+1=1

 

1+0=1

 

1+1=0 con riporto di 1

 

 

×

 

0

 

1

 

0

 

0

 

0

 

1

 

0

 

1

 

 

 

0×0=0

 

0×1=0

 

1×0=0

 

1×1=0

Queste tabelline mostrano che per eseguire operazioni in base 2 si procede esattamente come per le consuete operazioni in base dieci, ricordando che quando il risultato di una addizione o di una moltiplicazione raggiunge il valore della base, (il che può capitare solo sommando due “1”), il risultato dell’operazione è “0” con riporto di una unità alla potenza (cioè alla posizione successiva). Più precisamente, 1+1=10. Ora siamo pronti a sommare direttamente in base due: 

Addizione di numeri binari
Si vogliono sommare tra loro i numeri binari 101012 e 1112: per facilitare la comprensione del procedimento vediamo in parallelo lo svolgimento decimale e lo svolgimento binario:

 

BINARIO

DECIMALE

Riporti

111

 

1° Addendo

10101+

21+

2° Addendo

111=

7=

Risultato

11100

28

Come si può osservare dall’esempio basta eseguire le somme in colonna applicando in modo automatico le regole enunciate e si ottiene il risultato corretto; bisogna prestare molta attenzione ai riporti, per questo motivo sarebbe utile segnalarli sempre perché è molto elevato il rischio di lasciarne qualcuno per strada. È consigliabile inoltre svolgere le operazioni in colonna proprio come indicato nell’esempio per evitare di impantanarsi in calcoli inutili.

Potrebbe capitare che, sommando due numeri, il risultato sia costituito da un numero di cifre binarie maggiore di quelle degli addendi originari, questo è normale anche nel sistema decimale, infatti se sommiamo 9 e 8 otteniamo:

 

BINARIO

DECIMALE

Riporti

11

1

1° Addendo

1001+

9+

2° Addendo

1000=

8=

Risultato

11001

17

Sottrazione tra numeri binari
Anche per quanto riguarda la sottrazione tra numeri binari valgono le regole dell’aritmetica elementare e le operazioni vengono svolte in colonna secondo le seguenti regole:

0-0=0

1-1=0

1-0=1

0-1=1 con un prestito di 1 dalla cifra precedente

Quest’ultima regola è la più difficile da comprendere ed è bene chiarirla con un esempio:

 

1001011–

75–

101=

5=

1000110

70

Potrebbe capitare, svolgendo un’operazione di sottrazione binaria, che non sia possibile chiedere un prestito alla cifra immediatamente vicina perché essa è 0, in questo caso si chiede un prestito al primo 1 che si trova verso sinistra, e tutti gli 0 che «sorvoliamo» vengono trasformati in 1. Un esempio chiarisce meglio il concetto:

 

1010001–

81–

110=

6=

100101

75

Moltiplicazione tra numeri binari

La moltiplicazione evidenzia la semplicità di operare in base 2. Infatti è possibile svolgere tale operazione in colonna, usando le regole aritmetiche. Vediamo solo un esempio di prodotto tra numeri binari:

10110×

101=

10110

00000–

10110–

1101110

26+25+23+22+2=11010

Divisione tra numeri binari
È un’operazione ancor meno usuale della moltiplicazione, comunque anche per la divisione si opera come nel sistema decimale con le usuali regole aritmetiche.
Supponiamo di voler effettuare la divisione 14:2, vediamo lo svolgimento sia in binario sia in decimale:

 

1110

10

10

111

0110

 

10

010

10

0

 

 

14

2

14

7

0

 

L’inconveniente principale della rappresentazione binaria è che richiede molte cifre per esprimere numeri piccoli. Per esempio, 8710=1010111.
Prima di trovare la sua applicazione principe nell’aritmetica dei calcolatori, il sistema binario è stato a lungo una curiosità per matematici, che consideravano particolarmente elegante la sua semplicità. Il filosofo matematico Gottifried Wilhelm Leibniz (1646- 1716) ne era entusiasta, tanto da far scrivere a Laplace (1749- 1827), altro eminente matematico: “Leibiniz vide in questa aritmetica binaria l’immagine della creazione. Egli immaginò che l’Unità rappresentasse Dio e lo zero il vuoto; e che l’Ente Supremo avesse tratto tutti gli esseri dal vuoto, precisamente come l’unità e lo zero esprimono tutti i numeri in questo sistema di numerazione”.

NUMERI MACCHINA
Per rispondere alla domanda del titolo, è ormai chiaro che i computer “hanno due dita”. Non sono molte, ma permettono di semplificare l’impostazione di molti problemi e soprattutto la rappresentazione dei numeri.
Anche se. per motivi fisici, qualsiasi configurazione di memoria del computer costituisce una sequenza binaria, è interpretabile numericamente solo quando la si vuole utilizzare per rappresentare i numeri interi. In qualsiasi altra circostanza, le rappresentazioni binarie in una certa locazione di memoria vanno interpretate a seconda dell’uso a cui è destinata quella locazione. In altre parole, poiché la memoria è comunque solo una successione di “0” e di “1”, la rappresentazione di lettere dell’alfabeto, di ideogrammi cinesi o di qualunque altro tipo di informazione non numerica (come le istruzioni al processore, che nel corso dell’esecuzione del programma vengono caricate in memoria al pari dei dati) dovrà passare attraverso una codifica.
Tra i tipi di informazione più importanti che è necessario rappresentare in memoria vi sono ancora dei numeri, che chiameremo reali per distinguerli dagli interi di cui abbiamo parlato sinora. Sono numeri in cui distinguiamo una parte intera, una virgola e una parte decimale e servono a esprimere grandezze che non siano multipli interi dell’unità di misura prescelta.
Naturalmente, avremo a disposizione solo un numero finito di cifre, sia per la parte intera che per la parte decimale. Questo fatto cruciale ci porta a una considerazione importantissima. che è bene tenere sempre presente: il calcolatore è in grado di rappresentare solo un numero finito di numeri. Chiameremo tali numeri “numeri macchina”.
Una conseguenza fondamentale di questo fatto è che essendo in grado di rappresentare solo i numeri macchina, dovremo sostituire qualunque altro numero con uno di essi, producendo così una rappresentazione affetta da errore. Si noti che tranne nel caso eccezionale in cui il numero che interessa rappresentare è un numero macchina, questa è una limitazione essenziale e inevitabile del computer come strumento di calcolo. Altra conseguenza importantissima è che anche se tutti i dati di partenza di un dato problema fossero rappresentabili esattamente, quasi sicuramente non lo sarebbero i risultati intermedi, che per il solo fatto di essere rappresentati da numeri macchina genererebbero un errore che poi si ripercuoterebbe sui calcoli successivi. Potrebbero essere più grandi del massimo numero rappresentabile, e in questo caso si parla di overflow del sistema. Potrebbero essere più piccoli del più piccolo numero macchina diverso da zero, diventando indistinguibili da quest’ultimo, e in questo caso si parla di underflow
In parte, si rimedia a questi problemi con una rappresentazione ad hoc, chiamata rappresentazione in virgola mobile, che estende l’intervallo dei numeri rappresentabili.

Commento all'articolo