Non mi è particolarmente chiaro il discorso alle differenze tra i numeri
floating point calcolati e non.
Ovvero:
1.9 è un numero e ci siamo
1.8 + 0.1 è diverso
irb(main):023:0> 1.8 + 0.1
=> 1.9000000000000001
e va bene
Su un testo leggo la seguente frase condita da esempio:
Note that the difference between the two numbers
is preciselyFloat::EPSILON:
Float::EPSILON # => 2.22044604925031e-16
(1.8 + 0.1) - 1.9 # => 2.22044604925031e-16
All’Euruko di questo anno Xavier N. ha fatto un talk su questo tipo
di problemi, se vuoi trovi il video e le slide del video a questo
indirizzo NameBright - Coming Soon.
Forse può toglierti qualche dubbio e darti qualche idea.
Il problema che 0.1 non ha una rappresentazione binaria finita;
analogamente a 1/3 che non ha una rappresentazione decimale finita.
L’unica maniera corretta in generale di verificare l’uguaglianza fra
numeri
in virgola mobile a meno di un piccolo delta, come giustamente ha
scritto
Federico. Si verifica cio che sia