Successivo: Gli errori si sommano, Precedente: Rappresentazioni inesatte, Su: Inesattezza nei calcoli [Contenuti][Indice]
Poiché la rappresentazione interna del computer può discostarsi, sia pur di poco, dal valore esatto, confrontare dei valori in virgola mobile per vedere se sono esattamente uguali è generalmente una pessima idea. Questo è un esempio in cui tale confronto non funziona come dovrebbe:
$ gawk 'BEGIN { print (0.1 + 12.2 == 12.3) }' -| 0
Il metodo generalmente seguito per confrontare valori in virgola mobile consiste nel controllare se la differenza tra loro è minore di un certo valore (chiamato delta, o tolleranza). Quel che si deve decidere è qual è il valore minimo di delta adeguato. Il codice per far ciò è qualcosa del genere:
delta = 0.00001 # per esempio differenza = abs(a - b) # sottrazione dei due valori if (differenza < delta) # va bene else # non va bene
(Si presuppone che sia stata definita in qualche altra parte del programma
una semplice funzione di nome abs()
.) Se si scrive una funzione
per confrontare dei valori con un valore dato ‘delta’, si dovrebbe
utilizzare la notazione ‘differenza < abs(delta)’ nel caso che
a ‘delta’ venga assegnato un valore negativo.