It is quite usual that simple decimal fractions like
     0.1 or 0.7 cannot be
     converted into their internal binary counterparts without a
     little loss of precision. This can lead to confusing results: for
     example, floor((0.1+0.7)*10) will usually
     return 7 instead of the expected
     8 as the result of the internal representation
     really being something like 7.9999999999....
     
     This is related to the fact that it is impossible to exactly
     express some fractions in decimal notation with a finite number
     of digits. For instance, 1/3 in decimal form
     becomes 0.3333333. . ..
     
     So never trust floating number results to the last digit and
     never compare floating point numbers for equality. If you really
     need higher precision, you should use the arbitrary precision math functions
     or gmp functions instead.
      |