aritmetica in virgola mobile o fissa
aritmetica in virgola mobile o fissa settore della matematica che studia i modi di rappresentare i numeri in uno strumento automatico di calcolo. L’immissione di un dato in una calcolatrice o in un computer richiede un’operazione di codifica che deve tenere conto degli effettivi stati fisici della macchina. La situazione universalmente adottata, per la sua maggiore semplicità in relazione all’uso di dispositivi elettronici, è quella di fare ricorso a due stati fisici (on-off, oppure aperto-chiuso, oppure smagnetizzato-magnetizzato ecc.) per cui la più elementare informazione è il bit, che può assumere uno tra due valori, convenzionalmente indicati con le cifre 0 e 1. In un computer, perciò, ogni numero è rappresentato sotto forma di sequenze finite di bit o di gruppi di 8 bit (byte). L’aritmetica in virgola mobile o fissa rappresenta i numeri predisponendo determinate zone per i bit, ciascuna delle quali è interpretabile in modo diverso. In particolare, si parla di rappresentazione dei numeri in virgola fissa quando, nel sistema decimale, il numero è scritto come segue:
con a±k = {0, 1, …,}. Tutte le prime cifre a sinistra della parte intera sono omesse se uguali a 0, m e n sono numeri naturali non nulli e, su ogni macchina, predeterminati (da ciò deriva l’espressione «in virgola fissa»: il numero massimo di cifre decimali può comunque generalmente essere fissato anche a un valore minore di n). La rappresentazione dei numeri in virgola fissa possiede il vantaggio della semplicità, ma presenta degli svantaggi legati alla limitata quantità di memoria che le macchine hanno a disposizione. Infatti, una volta fissato il numero massimo di cifre per la mantissa, è determinata la minima distanza tra due numeri rappresentabili (se il numero delle cifre decimali è m la minima distanza è 10-m) e risulta quindi difficile – se non impossibile – apprezzarne le piccole differenze, arrivando anche a fenomeni quali la → cancellazione numerica del risultato, che si verifica quando la differenza tra due numeri di poco differenti ottenuti da calcoli algoritmici fornisce, a causa di errori di arrotondamento, un risultato nullo. Poiché il sistema di numerazione interno dei computer è il sistema binario, ogni numero è costituito da una sequenza di 0 o di 1 e va quindi determinato il numero dei bit da usare per la parte intera e quello da impiegare per la parte frazionaria (il segno è determinato dal primo bit a sinistra della stringa). Indicando con L la lunghezza totale della sequenza di bit, con I il numero di bit della parte intera e con F il numero di bit della parte frazionaria si ha:
È possibile calcolare il limite di overflow, al di fuori del quale un numero a non è più rappresentabile dalla macchina:
Il valore assoluto del numero più piccolo, o limite di underflow, è a = 2−F, che indica anche l’errore di troncamento commesso dalla macchina. Nella rappresentazione in virgola mobile (o in floating point, secondo l’espressione inglese) il numero è scritto come segue:
in cui sgn(a) è il segno del numero (che è omesso quando è +), an è la cifra del numero di ordine più elevato diversa da 0, il simbolo E (o uno equivalente) sta per «moltiplicato per 10 elevato alla», sgn(e) è il segno dell’esponente ed e1e2 sono le cifre del valore assoluto dell’esponente che, se il numero è maggiore di 1 e con a0 è stata indicata la cifra delle unità del numero, vale n.
Tale rappresentazione ha una stretta relazione con la → notazione esponenziale di un numero: per esempio, il numero 0,000321 si scrive in notazione esponenziale come 3,21 × 10−4 ed è visualizzato come 3,21 E-4. Tale notazione non è univoca, perché si può scegliere di collocare il punto decimale arbitrariamente, ma generalmente si utilizza una rappresentazione in virgola mobile normalizzata, in cui il punto decimale precede immediatamente la prima cifra della mantissa diversa da 0. Data la finitezza della memoria di ogni macchina, anche l’aritmetica in virgola mobile ha limiti di overflow e di underflow e non può che rappresentare un insieme finito e discreto di numeri, ma, grazie all’utilizzo della notazione esponenziale, che permette di tralasciare di scrivere i primi zeri della parte decimale se il numero è compreso tra −1 e 1, la distanza minima tra i numeri rappresentabili varia a seconda dell’ordine di grandezza: i numeri rappresentati si infittiscono avvicinandosi alla barriera di underflow, dove la parte decimale ha più importanza, mentre si diradano approssimandosi alla barriera di overflow, dove è più significativa la parte intera.
Lo standard ieee (Institute of Electrical and Electronics Engineers) impone due forme interne per i numeri in virgola mobile rappresentabili sui computer: la singola precisione e la doppia precisione. Nella singola precisione si hanno a disposizione 32 bit per la memorizzazione del numero in sistema binario che sono suddivisi come in tabella:
Il bit 31 indica il segno del numero e s = 1 se e solo se il segno è −; gli 8 bit da 30 a 23 forniscono il valore dell’esponente (compreso il suo segno: gli esponenti da −126 a 127 sono rappresentati, in binario, come numeri da 1 a 254). La mantissa dà le cifre significative del numero che, complessivamente, è dunque dato da (−1)s · 2E · M. Il massimo numero rappresentabile è (223 − 1)127, mentre il minimo numero positivo rappresentabile è 1−126.
La doppia precisione ha una struttura analoga, ma per la rappresentazione del numero utilizza 64 bit.