Il confronto di due numeri in virgola mobile con qualcosa come a_float == b_float
sta cercando problemi dato che a_float / 3.0 * 3.0
potrebbe non essere uguale a a_float
causa di un errore irreversibile.
Quello che si fa normalmente è qualcosa come fabs(a_float - b_float) < tol
.
Come si calcola tol
?
Idealmente la tolleranza dovrebbe essere appena più grande del valore di una o due delle figure meno significative. Quindi se il numero a virgola mobile di precisione singola è utilizzare tol = 10E-6
dovrebbe essere corretto. Tuttavia questo non funziona bene nel caso generale in cui a_float
potrebbe essere molto piccolo o potrebbe essere molto grande.
Come si calcola il tol
correttamente per tutti i casi generali? Sono interessato in particolare ai casi C o C ++.