Представим ситуацию, где мы работаем с числами, которые очень близки друг к другу, но не совсем идентичны из-за особенностей представления плавающей точки. Например, сравнение чисел 0.1 + 0.2 и 0.3 может быть не совсем корректным из-за внутреннего представления этих чисел в памяти компьютера.
В PHP константа FLOAT_EPSILON представляет собой наименьшее положительное число, которое может быть корректно отличимо от нуля при использовании типа float. Это значение особенно важно при сравнении чисел с плавающей точкой.
Пример:
# Результат этого вычисления не ровно 0.3 из-за ошибки округления
$num1 = 0.1 + 0.2;
$num2 = 0.3;
var_dump( $num1 );
# > float(0.30000000000000004)
var_dump( $num2 );
# > float(0.3)
# Проверяем, равны ли $num1 и $num2
if( $num1 == $num2)
{
echo 'Числа равны';
}
else
{
echo 'Числа не равны.';
}
# > Числа не равны.
# Проверяем, равны ли $num1 и $num2, используя PHP_FLOAT_EPSILON
if( abs($num1 - $num2) < PHP_FLOAT_EPSILON )
{
echo 'Числа равны с учетом погрешности.';
}
else
{
echo 'Числа не равны.';
}
# > Числа равны с учетом погрешности.
Комментарии
0Нашли ошибку или хотите дополнить материал?