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 'Числа не равны.'; } # > Числа равны с учетом погрешности.
Комментарии