Разработчику. Сборник рецептов PHP
Задавайте вопросы

Сравнение чисел с плавающей точкой

Вернуться назад

Задача

Необходимо проверить равенство двух чисел с плавающей точкой.

Решение

Задайте малую дельту и проверьте числа на равенство в пределах этой дельты:

$delta = 0.00001;

$a = 1.00000001;
$b = 1.00000000;

if (abs($a-$b) < $delta) { /* $a и $b равны */ }

Обсуждение

Числа с плавающей точкой представляются в двоичном виде только с конечным количеством разрядов для мантиссы и порядка. При превышении этого количества происходит переполнение. В результате иногда PHP (а также другие языки) не считают два числа действительно равными, так как они могут отличаться в самом последнем разряде. Для того чтобы обойти эту трудность, вместо проверки равенства $a == $b следует обеспечить очень небольшую разность ($delta) между первым и вторым числом. Размер этой дельты должен быть меньше разницы между двумя числами, которую вы хотите обеспечить. Затем для получения абсолютного значения разности вызывается функция abs().

Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования


Рейтинг Сайтов ДОСКИ.РУ