>  기사  >  백엔드 개발  >  PHP 부동 소수점 숫자_php 기술의 정확한 작동에 대해 간략하게 설명합니다.

PHP 부동 소수점 숫자_php 기술의 정확한 작동에 대해 간략하게 설명합니다.

WBOY
WBOY원래의
2016-05-16 19:57:231050검색

bc는 Binary Calculator의 약자입니다. bc* 함수의 매개변수는 모든 피연산자에 string bcadd(string $left_operand, string $right_operand[, int $scale])와 같은 선택적 [int scale]을 더한 것입니다. scale이 제공되지 않으면 기본값인 bcscale이 사용됩니다. . 값. 여기서 큰 숫자는 0~9로 구성된 문자열로 직접 표현되며, 계산 결과도 문자열이다.

bcadd — 두 개의 고정밀 숫자 추가
bccomp — 두 개의 고정밀 숫자를 비교하고 -1, 0, 1을 반환합니다.
bcdiv — 두 개의 고정밀 숫자 나누기
bcmod — 고정밀도 숫자의 나머지 찾기
bcmul — 두 개의 고정밀도 숫자를 곱합니다
bcpow — 전력 고정밀 숫자
bcpowmod — 정수론에서 매우 일반적으로 사용되는 고정밀 수치 거듭제곱과 계수를 찾습니다.
bcscale — Linux bc
의 "scale="에 해당하는 기본 소수점 수를 구성합니다. bcsqrt — 고정밀도 숫자의 제곱근 찾기
bcsub — 두 개의 고정밀도 숫자 빼기

첫 번째 코드 살펴보기:

<&#63;php
$a = 0.1;
$b = 0.7;
var_dump(($a + $b) == 0.8);

인쇄된 값은 실제로 부울 false입니다

이유는 무엇입니까? PHP 매뉴얼에는 부동 소수점 숫자에 대해 다음과 같은 경고 메시지가 있습니다.

경고
부동 소수점 정밀도
분명히 0.1이나 0.7과 같은 단순한 소수는 약간의 정밀도 손실 없이 내부 이진 형식으로 변환될 수 없습니다. 이로 인해 혼란스러운 결과가 발생할 수 있습니다. 예를 들어, 바닥((0.1 0.7)*10)은 일반적으로 예상되는 8 대신 7을 반환합니다. 왜냐하면 결과의 내부 표현은 7.9999999999... 와 같기 때문입니다.
이는 특정 소수를 유한한 자릿수로 정확하게 표현하는 것이 불가능하다는 사실과 관련이 있습니다. 예를 들어, 10진수 1/3은 0.3333333이 됩니다.
따라서 부동 소수점 숫자 결과가 마지막 숫자까지 정확하다고 절대 신뢰하지 말고 두 개의 부동 소수점 숫자가 같은지 비교하지 마십시오. 정말로 더 높은 정밀도가 필요한 경우 임의 정밀도 수학 함수나 gmp 함수를 사용해야 합니다

그러면 위의 방정식을

으로 다시 작성해야 합니다.
<&#63;php
$a = 0.1;
$b = 0.7;
var_dump(bcadd($a,$b,2) == 0.8);

부동소수점 계산 문제를 해결할 수 있습니다

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