Come confrontare i galleggianti con il delta?
-
04-07-2019 - |
Domanda
Esistono in Ruby alcune funzionalità / sintassi per confrontare due float con delta? Qualcosa di simile a assert_in_delta (expected_float, actual_float, delta) da test / unit ma che restituisce booleano?
Soluzione
(expected_float - actual_float).abs <= delta
Altri suggerimenti
A seconda dell'applicazione e dei valori in virgola mobile effettivamente rappresentati, potrebbe avere senso convertirli in Rationals con una determinata precisione. Quindi i confronti diretti si comporteranno sempre correttamente poiché le Razionali sono solo due numeri interi.
Ad esempio, se sai che hai a che fare con importi in valuta statunitensi, memorizzarli come amount.to_r.round (2)
consente confronti esatti per l'uguaglianza.
Solo un pensiero ... non tutti i valori non interi devono essere float rappresentati in modo inesatto
potresti anche aver bisogno di un calcolo relativo di tolleranza / delta