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

Представим ситуацию, где мы работаем с числами, которые очень близки друг к другу, но не совсем идентичны из-за особенностей представления плавающей точки. Например, сравнение чисел 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 'Числа не равны.';
}
# > Числа равны с учетом погрешности.
PHP Просмотров: 346
Оценить код:

Комментарии

Ваш комментарий будет первым.
Войдите, чтобы оставить комментарий.