Successivo: , Precedente: , Su: Inesattezza nei calcoli   [Contenuti][Indice]


16.4.1.2 Fare attenzione quando si confrontano valori

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.