Assert_equal 1.1035, 1.0035 + 0.1 is false


some of my tests failed when comparing two floats.

the comparison of:

1.1035 == 1.0035 + 0.1

evaluates to false - i do not really understand why.

must depend on the value range, because

1.103 == 1.003 + 0.1

evaluates to true.

would be great if anyone could help me getting this working and maybe
giving an explanation why ruby do not handle the == operator for float
as one would expect (coming from java).

tested on:

1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0]

jan zimmek


On 23 Jan 2009, at 16:49, jzimmek wrote:

1.103 == 1.003 + 0.1

basically because 0.1 cannot be exactly represented in binary.

assert_in_delta is good for this sort of stuff.



Crud, he beat me to it.

You’re going to have to either change the logic or change the testing
procedure for it.

On Jan 23, 10:55 am, Frederick C. removed_email_address@domain.invalid


thanks for clarification … have found some further explanations/
solutions and will change my testing-logic.

On Jan 23, 5:55 pm, Frederick C. removed_email_address@domain.invalid


Quoting jzimmek removed_email_address@domain.invalid:

1.103 == 1.003 + 0.1

In general, exact comparisons of floating point numbers is a bad idea.
better idea is something along the lines of:

(value1 - value2).abs <= epsilon

epsilon may be a fixed value of a fraction of the values, maybe

epsilon = (value1 + value2) / 100

i.e. 1/50 the average of the two. The best solution depends on the