One thing to keep in mind here is that Float.MIN_VALUE is the smallest

**positive** value representable as a float. This is very different from Integer.MIN_VALUE which is a large

**negative** number. I wish the designers of

Java hadn't used the same name to mean two very different things.

Floating point numbers have a limited amount of precision. If you add Float.MIN_VALUE (1e-45) to either 1 or -1, you will lose precision because there aren't enough bits available to represent 46 decimal places of precision.