PHP에서 큰 숫자 계산의 정밀도 유지
PHP에서는 매우 큰 정수에 대한 계산을 수행할 때 정밀도 문제가 발생할 수 있습니다. 이는 Fermat 원시성 검정에서와 같이 모듈러 지수화와 같은 기술을 사용할 때 문제가 될 수 있습니다.
부동 소수점 수수께끼
두 개의 큰 정수를 곱하면 다음과 같은 값이 나올 수 있습니다. PHP에서는 자동으로 float로 캐스팅됩니다. 이로 인해 아래와 같이 잘못된 모듈러스 계산이 발생할 수 있습니다.
$x = 62574 * 62574; var_dump($x); // float(3915505476) ... correct var_dump($x % 104659); // int(-72945) ... incorrect
솔루션
PHP는 큰 숫자를 처리할 수 있는 두 개의 외부 라이브러리인 BC Math와 GMP를 제공합니다. GMP는 더욱 포괄적인 API를 제공하여 매우 큰 값에도 정밀도를 보장합니다.
GMP 사용
GMP는 임의의 정밀도 숫자를 나타내는 데 사용할 수 있습니다. 제공된 답변에서 볼 수 있듯이 Decimal2와 같은 사용자 정의 클래스를 생성하여 큰 숫자 계산을 용이하게 하고 반올림 및 모듈러스 계산과 같은 기능을 제공할 수 있습니다.
// Using the GMP library $bignum = gmp_init('62574'); // Initialize GMP number $product = gmp_mul($bignum, $bignum); // Multiply using GMP $modulus = gmp_mod($product, 104659); // Calculate modulus using GMP echo gmp_strval($modulus); // Output the correct modulus value
이 방법을 사용하면 필요한 방법으로 큰 숫자를 계산하고 처리할 수 있습니다. 정확성이 저하될 가능성은 없습니다.
위 내용은 매우 큰 정수를 계산할 때 PHP는 어떻게 정밀도를 유지할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!