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


15.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 a 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 a 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) - abs(b)    # sottrazione dei due valori
if (differenza < delta)
    # va bene
else
    # non va bene

(Si presuppone che sia stata definita in qualche parte del programma una semplice funzione che restituisce il valore assoluto di un numero, chiamata abs().)