PHP에서 부동 소수점(float) 값을 비교할 때는 abs() 함수를 활용해 두 값의 차이가 허용 오차 범위 안에 있는지 확인하는 방법이 널리 사용됩니다. 관련 예제 코드는 다음과 같습니다.
예제
<?php
$val_1 = 56.5325;
$val_2 = 90.899;
$val_3 = 0.11;
if(abs($val_1 - $val_2) < $val_3)
{
echo "The values are same";
}
else
{
echo "The values are not same";
}
?>출력 결과
The values are not same
코드 설명
위 코드에서는 세 개의 부동 소수점 변수인 $val_1, $val_2, $val_3를 정의합니다. 이 중 $val_3은 두 값을 비교할 때 기준이 되는 허용 오차(epsilon) 역할을 합니다.
abs($val_1 - $val_2)는 두 값의 차이에 대한 절댓값을 계산합니다. 이 값이 $val_3보다 작으면 두 수를 사실상 동일한 값으로 간주하여 "The values are same" 메시지를 출력하고, 그렇지 않으면 "The values are not same" 메시지를 출력합니다.
이 예제에서 56.5325와 90.899의 차이는 약 34.37로 허용 오차인 0.11보다 훨씬 크기 때문에, 최종적으로 "The values are not same"이 화면에 출력됩니다.
== 연산자 대신 abs()를 사용하는 이유
부동 소수점 숫자는 컴퓨터 내부에서 이진수로 근사되어 저장되기 때문에 미세한 정밀도 오차가 발생할 수 있습니다. 따라서 == 연산자로 직접 비교하면 겉보기에 같아 보이는 값이라도 서로 다르다고 판정되는 경우가 생길 수 있습니다.
그래서 실무에서는 위 예제처럼 두 값의 차이를 구한 뒤 일정한 오차 범위 이내인지 확인하는 방식으로 부동 소수점을 비교하는 것이 가장 안전하고 권장되는 방법입니다.