L’argomento riguarda la rappresentazione dei numeri con la virgola nei computers denominati floating point numbers,  numeri in virgola mobile. L’IEEE (Institute of Electrical and Electronics Engineers) è un istituto americano che emette le specifiche che definiscono gli standard dei vari protocolli di comunicazione e di rete. Lo standard IEEE per il calcolo in virgola mobile IEEE 754 (ufficialmente: IEEE Standard for Binary Floating-Point Arithmetic) definisce, come in figura, la rappresentazione binaria dei numeri in virgola mobile a 32 bit:

epsilon2

Per eventuali approfondimenti sull’argomento è sufficiente cercare con il proprio motore di ricerca preferito la parola chiave “IEEE 754”.

Ciò che viene omesso negli articoli riguardanti questa rappresentazione è che esiste una serie di numeri che non si comporta come previsto, un numero qualsiasi di tale serie, sommato ad 1 restituisce ancora un valore uguale a 1. Procediamo con ordine, tenendo presente che il discorso vale sia per i numeri positivi che negativi. Abbiamo tre entità: lo zero, il minimo numero rappresentabile e l’epsilon.

Lo zero lo conosciamo bene, quindi passiamo al minimo numero rappresentabile, che in quest’articolo indicheremo con m. m è il numero più piccolo che un computer può rappresentare. Un tentativo di rappresentazione di un numero più piccolo di m darebbe un errore di underflow. Il valore di questo numero cambia a seconda dell’architettura dell’elaboratore.

Esiste poi un numero che, sufficientemente piccolo ma più grande di m, che viene ancora “avvertito” dalla macchina: l’epsilon, indicato con il segno ε. L’epsilon è il più piccolo numero che, sommato all’unità, dà ancora un valore diverso da 1. Tutti i numeri inferiori ad epsilon (e maggiori di m) sommati ad 1 daranno ancora 1 come risultato.

Ma come avviene questo? I numeri sono infiniti, ma a causa della quantità di memoria non infinita di cui dispone, il calcolatore non può rappresentare gli infiniti numeri reali nè quei numeri che contengono un numero infinito di cifre decimali. I numeri di macchina sono quei numeri reali che il calcolatore può rappresentare esattamente. L’insieme dei numeri di macchina, denotato con F, è per natura un insieme di cardinalità finita, formato da un numero finito di elementi. Ogni numero reale non appartenente ad F verrà opportunamente approssimato ad un numero di macchina: l’errore che ne consegue è detto errore di rappresentazione. F, quindi, è un sottoinsieme del più noto R, ovvero l’insieme dei numeri reali.

Come conseguenza, i dati di input su cui un algoritmo dovrà lavorare saranno affetti, in generale, dagli errori di rappresentazione. Essi sono ragionevolmente piccoli, tuttavia se le soluzioni del problema dipendono in maniera particolarmente sensibile dai dati iniziali, l’errore finale sulla soluzione può essere rilevante tanto da rendere completamente inattendibile il risultato.

Altro fattore importante è che non è mai ragionevole pretendere l’uguaglianza esatta fra numeri in virgola mobile, ma è sufficiente che la loro differenza sia superiore ad epsilon.