Сравнение чисел с плавающей точкой при помощи языка PHP.
Решение
Задайте малую дельту и проверьте числа на равенство в пределах этой дельты:
$delta = 0.00001;
$a = 1.00000001; $b = 1.00000000;
if (abs($a-$b) < $delta) { /* $a и $b равны */ }
Обсуждение
Числа с плавающей точкой представляются в двоичном виде только с конечным количеством разрядов для мантиссы и порядка. При превышении этого количества происходит переполнение. В результате иногда PHP (а также другие языки) не считают два числа действительно равными, так как они могут отличаться в самом последнем разряде. Для того чтобы обойти эту трудность, вместо проверки равенства $a == $b следует обеспечить очень небольшую разность ($delta) между первым и вторым числом. Размер этой дельты должен быть меньше разницы между двумя числами, которую вы хотите обеспечить. Затем для получения абсолютного значения разности вызывается функция abs().