널리 사용되는 서버 측 스크립팅 언어로서 PHP는 부동 소수점 번호를 계산할 때 종종 정확도 손실 문제에 직면합니다. 이는 주로 부동 소수점 수가 컴퓨터 내의 이진수로 표시되며, 많은 십진수 숫자는 이진수로 정확하게 표현할 수 없으므로 반올림 및 잘린 오류가 발생합니다. 계산 프로세스가 진행됨에 따라 이러한 작은 오류는 계속 축적되어 궁극적으로 결과의 정확도에 영향을 미칩니다.
단순한 부동 소수점 작동조차도 예기치 않은 오류가 발생할 수 있습니다. 예를 들어:
$num1 = 0.1;
$num2 = 0.2;
$sum = $num1 + $num2;
echo $sum; // 출력은 엄격하지 않습니다0.3,대략적인 값입니다
이것은 매일 코딩 할 때 항상 부동 소수점 수술이 가져올 수있는 불확실성에주의를 기울여야 함을 보여줍니다.
일반적인 방법은 부동 소수점 번호를 정수로 변환하여 계산을 수행 한 다음 완료 후 플로팅 포인트 번호로 다시 전환하는 것입니다. 이로 인해 부동 소수점 정확도 손실의 위험을 효과적으로 줄일 수 있습니다. 예를 들어:
$num1 = 0.1;
$num2 = 0.2;
$sum = (intval($num1 * 100) + intval($num2 * 100)) / 100;
echo $sum; // 산출0.3
PHP의 내장 BCMath 확장자는 정확한 소수점이 필요한 경우 BCADD (), bcsub (), bcmul () 및 bcdiv ()와 같은 고정밀 수학적 함수 세트를 제공합니다. 예는 다음과 같습니다.
$num1 = '0.1';
$num2 = '0.2';
$sum = bcadd($num1, $num2, 1);
echo $sum; // 산출0.3
일반적으로 동일한 부호를 사용하여 부동 소수점 숫자를 직접 비교하는 것은 신뢰할 수 없습니다. 두 부동 소수점 숫자 사이의 차이의 절대 값 이이 임계 값보다 적은지 여부를 결정함으로써 평등을 결정하기 위해 오차 임계 값을 설정해야합니다. 예를 들어:
$num1 = 0.1 + 0.2;
$num2 = 0.3;
if (abs($num1 - $num2) < 0.0001) {
echo '동일한';
} else {
echo '不동일한';
}
플로팅 포인트 수의 정확도 문제는 컴퓨터 과학에서 일반적인 문제이며 PHP도 예외는 아닙니다. 정수 계산, BCMATH 확장 및 오류 허용 오류 비교와 같은 전략을 채택함으로써 부동 소수점 수업 오류로 인한 문제를 효과적으로 피할 수 있습니다. 실제 개발에서, 계산 결과의 정확성과 절차의 안정성을 보장하기 위해 특정 비즈니스 요구에 따라 계획을 합리적으로 선택해야합니다.
이 기사가 PHP 플로팅 포인트 번호 처리에 귀중한 참조와 도움을 줄 수 있기를 바랍니다.