Автор: Созидатель 11.2.2007, 22:43
Точность числа с плавающей точкой.
Довольно часто простые десятичные дроби вроде 0.1 или 0.7 не могут быть преобразованы в свои внутренние двоичные аналоги без небольшой потери точности. Это может привести к неожиданным результатам: например,
Код
floor((0.1+0.7)*10)
или уже для совсем "....."
Код
echo floor((0.1+0.7)*10)
скорее всего возвратит
7 вместо ожидаемой
8 как результат внутреннего представления числа, являющегося в действительности чем-то вроде
7.9999999999.... Это связано с невозможностью точно выразить некоторые дроби в десятичной системе счисления конечным числом цифр. Например,
1/3 в десятичной форме принимает вид
0.3333333....
Так что никогда не доверяйте точности последних цифр в результатах с числами с плавающей точкой и никогда не проверяйте их на равенство.