Is checking a double for equality ever safe?

The reason you shouldn’t check floats for equality is that floating point numbers are not perfectly precise — there’s some inaccuracy in storage with some numbers, such as those that extended too far into the mantissa and repeating decimals (note that I’m talking about repeating decimals in base 2). You can think of this imprecision as “rounding down”. The digits that extend beyond the precision of the floating-point number are truncated, effectively rounding down.

If it has not changed, it will keep that equality. However, if you change it even slightly, you probably should not use equalities, but instead a range like (x < 0.0001 && x > -.0001).

In short: as long as you’re not playing with x at a very small level, it’s OK.

It is safe if the 0 you’re trying to catch is the original 0 set at initialization. However, it isn’t safe if you’re expecting a 0 from a mathematical operation.

Leave a Comment