>  기사  >  백엔드 개발  >  PHP Float 비교가 성공해야 하는데 왜 실패합니까?

PHP Float 비교가 성공해야 하는데 왜 실패합니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-01 00:32:28500검색

Why Does My PHP Float Comparison Fail When It Should Succeed?

PHP 부동 소수점 계산 정확도 수수께끼

프로그래밍에서 부동 소수점 계산은 부정확한 특성으로 인해 종종 문제를 일으킬 수 있습니다. PHP 코드 조각에 예시된 것처럼 두 개의 부동 소수점 숫자를 임계값과 비교하면 항상 예상한 결과가 생성되지 않을 수 있습니다.

문제 공식:

제공된 PHP 코드 다음 작업이 포함됩니다.

  1. $fooValue 및 $cowValue에 특정 부동 소수점 값을 할당합니다.
  2. 이러한 값 간의 차이를 계산하여 $diffValue에 저장합니다.
  3. $diffValue가 0.01보다 작거나 같은지 확인한 다음 echo "success"; 그렇지 않으면 echo "error."

문제는 <=를 사용하여 부동 소수점을 임계값과 비교하는 데 있습니다. 이 경우 차이가 거의 0임에도 불구하고 "오류"를 출력하여 코드가 예상치 못한 동작을 보입니다.

해결책 설명:

부동 소수점 계산의 부정확성은 10진수에서 2진수로 또는 그 반대로 변환하는 동안 정밀도가 손실됩니다. 따라서 정확한 동일성을 요구하는 == 또는 <=를 사용한 비교는 항상 정확한 결과를 산출하지 못할 수도 있습니다.

이 문제를 해결하려면 다음과 같은 대체 접근 방식을 사용하세요.

  • BC 수학 라이브러리: 더 높은 정밀도의 부동 소수점 산술을 위한 특정 기능을 제공합니다.
  • GMP 라이브러리: 계산에 정수를 활용하여 부동 소수점 부정확성이 발생할 가능성을 제거합니다. 그러나 정수와 부동 소수점 간의 변환이 필요하므로 정밀도 손실이 발생할 수 있습니다.

프로그래머는 이러한 라이브러리를 활용하여 부동 소수점 계산에 내재된 부정확성을 완화하고 보다 정확한 비교를 수행할 수 있습니다.

위 내용은 PHP Float 비교가 성공해야 하는데 왜 실패합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.