Successivo: Definizioni matematiche, Su: Calcolo con precisione arbitraria [Contenuti][Indice]
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:
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.
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.
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.
Rappresentazione | Valore minimo | Valore massimo |
---|---|---|
Interi con segno a 32-bit | -2.147.483.648 | 2.147.483.647 |
Interi senza segno a 32-bit | 0 | 4.294.967.295 |
Interi con segno a 64-bit | -9.223.372.036.854.775.808 | 9.223.372.036.854.775.807 |
Interi senza segno a 64-bit | 0 | 18.446.744.073.709.551.615 |
Rappresentazione | Valore positivo minimo diverso da zero | Valore finito minimo | Valore finito massimo |
---|---|---|---|
Virgola mobile, singola precis. | 1,175494-38 | -3,40282338 | 3,402823*1038 |
Virgola mobile, singola precis. | 2,225074-308 | -1,797693308 | 1,797693*10308 |
Virgola mobile, quadrupla prec. | 3,362103-4932 | -1,1897314932 | 1,1897314932 |
Successivo: Definizioni matematiche, Su: Calcolo con precisione arbitraria [Contenuti][Indice]