О Великий и Могучий, Милостивый и Милосердный МАН, не дай умереть в неведении!
"Точность "с плавающей точкой"
Весьма часто простые дроби вроде 0.1 или 0.7 не могут конвертироваться в их внутренние двоичные представления без потери точности. Это может привести к парадоксальным результатам: например, floor((0.1+0.7)*10) обычно возвращает 7 вместо ожидаемого 8 как результат внутреннего представления приблизительного числа 7.9999999999....
Причиной является то, что невозможно точно выразить некоторые дроби в десятичной нотации конечным количеством цифр. Например, 1/3 в десятичной форме имеет вид 0.3333333...
Итак, никогда не полагайтесь на точность результата с плавающей точкой до последней цифры и никогда не проверяйте равенство чисел с плавающей точкой. Если вам нужна действительно высокая точность вычислений, вы должны использовать math-функции произвольной точности или gmp."