Successivo: , Su: Calcolo con precisione arbitraria   [Contenuti][Indice]


16.1 Una descrizione generale dell’aritmetica del computer

Sinora, abbiamo avuto a che fare con dati come numeri o stringhe. Ultimamente, comunque, i computer rappresentano ogni cosa in termini di cifre binarie, o bit. Una cifra decimale può assumere uno di 10 valori: da zero a nove. Una cifra binaria può assumere uno di due valori: zero o uno. Usando il sistema binario, i computer (e i programmi per computer) possono rappresentare e manipolare dati numerici e dati costituiti da caratteri. In generale, tanti più bit è possibile usare per rappresentare una determinata cosa, tanto maggiore sarà l’intervallo dei possibili valori che essa potrà assumere.

I moderni calcolatori possono eseguire calcoli numerici in almeno due modi, e spesso anche di più. Ogni tipo di calcolo usa una diversa rappresentazione (organizzazione dei bit) dei numeri. Le modalità di calcolo che ci interessano sono:

Calcolo decimale

Questo è il tipo di calcolo che s’impara alle scuole elementari, usando carta e penna (o anche una calcolatrice). In teoria, i numeri possono avere un numero arbitrario di cifre su ambo i lati del separatore decimale, e il risultato di un’operazione è sempre esatto.

Alcuni sistemi moderni possono eseguire calcoli decimali direttamente, tramite apposite istruzioni disponibili nell’hardware dell’elaboratore, ma normalmente si ha necessità di una speciale libreria software che consenta di effettuare le operazioni desiderate. Ci sono anche librerie che svolgono i calcoli decimali interamente per via software.

Anche se alcuni utenti si aspettano che gawk effettui delle operazioni usando numeri in base decimale,102 non è questo quello che succede.

La matematica coi numeri interi

A scuola ci hanno insegnato che i valori interi erano quei numeri privi di una parte frazionaria, come 1, 42, o -17. Il vantaggio dei numeri interi è che essi rappresentano dei valori in maniera esatta. Lo svantaggio è che i numeri rappresentabili sono limitati.

Nei calcolatori, i valori interi sono di due tipi: con segno e senza segno. I valori con segno possono essere negativi o positivi, mentre i valori senza segno sono sempre maggiori o uguali a zero.

Nei sistemi informatici, il calcolo con valori interi è esatto, ma il possibile campo di variazione dei valori è limitato. L’elaborazione con numeri interi è più veloce di quella con numeri in virgola mobile.

La matematica coi numeri in virgola mobile

I numeri in virgola mobile rappresentano quelli che a scuola sono chiamati numeri “reali” (cioè, quelli che hanno una parte frazionaria, come 3.1415927). Il vantaggio dei numeri in virgola mobile è che essi possono rappresentare uno spettro di valori molto più ampio di quello rappresentato dai numeri interi. Lo svantaggio è che ci sono numeri che essi non possono rappresentare in modo esatto.

I computer moderni possono eseguire calcoli su valori in virgola mobile nell’hardware dell’elaboratore, entro un intervallo di valori limitato. Ci sono inoltre librerie di programmi che consentono calcoli, usando numeri in virgola mobile, di precisione arbitraria.

POSIX awk usa numeri in virgola mobile a doppia precisione, che possono gestire più cifre rispetto ai numeri in virgola mobile a singola precisione. gawk ha inoltre funzionalità, descritte in dettaglio più sotto, che lo mettono in grado di eseguire calcoli con i numeri in virgola mobile con precisione arbitraria.

I calcolatori operano con valori interi e in virgola mobile su diversi intervalli. I valori interi normalmente hanno una dimensione di 32 bit o 64 bit. I valori in virgola mobile a singola precisione occupano 32 bit, mentre i valori in virgola mobile a doppia precisione occupano 64 bit. (Esistono anche numeri in virgola mobile a precisione quadrupla. Occupano 128 bit, ma non sono disponibili in awk.) I valori in virgola mobile sono sempre con segno. I possibili campi di variazione dei valori sono mostrati in Tabella 16.1 e in Tabella 16.2.

RappresentazioneValore minimoValore massimo
Interi con segno a 32-bit-2.147.483.6482.147.483.647
Interi senza segno a 32-bit04.294.967.295
Interi con segno a 64-bit-9.223.372.036.854.775.8089.223.372.036.854.775.807
Interi senza segno a 64-bit018.446.744.073.709.551.615

Tabella 16.1: Intervallo di valori per rappresentazioni di numeri interi

RappresentazioneValore positivo minimo diverso da zeroValore finito minimoValore finito massimo
Virgola mobile, singola precis.1,175494-38-3,402823383,402823*1038
Virgola mobile, singola precis.2,225074-308-1,7976933081,797693*10308
Virgola mobile, quadrupla prec.3,362103-4932-1,18973149321,1897314932

Tabella 16.2: Intervallo di valori per rappresentazioni di numeri in virgola mobile


Note a piè di pagina

(102)

Non sappiamo perché se lo aspettino, ma è così.


Successivo: , Su: Calcolo con precisione arbitraria   [Contenuti][Indice]