GNU Multiple Precision(GMP)

GNU Multiple Precision(GMP)

자릿수 제한 없이 아주 큰 정수를 다뤄야 하는 경우가 있어요. BCMath가 문자열 기반이라면, GMP는 GNU MP 라이브러리 기반으로 더 빠르게 임의 길이의 정수를 처리해 줘요.

출처: GNU Multiple Precision

본문

GMP 함수들은 GNU MP 라이브러리를 사용해 임의 길이의 정수(arbitrary-length integers)를 다룰 수 있게 해 줘요.

몇 가지 알아둘 점이 있어요.

  • 대부분의 GMP 함수는 GMP 숫자 인자를 받아요. 문서에서는 이를 GMP 객체로 표기해요. 대부분의 함수는 숫자나 문자열 인자도 받아들이는데, 문자열이 숫자로 변환 가능하다면 말이죠. 또한 인자(정수만)에 대해 더 성능이 좋은 함수가 있다면 그 함수가 대신 사용돼요(이 과정은 투명하게 일어나요). gmp_init() 함수도 함께 확인해 보세요.
  • gmp_init() 및 다른 GMP 함수가 반환한 GMP 객체에는 산술, 비트, 비교 연산자를 그대로 사용할 수 있어요.
  • 큰 정수는 반드시 문자열로 지정해야 해요. 그렇지 않으면 PHP가 float로 변환하면서 정밀도를 잃게 돼요.

GMP 함수들

  • gmp_abs — 절댓값
  • gmp_add — 숫자 더하기
  • gmp_and — 비트 AND
  • gmp_binomial — 이항 계수 계산
  • gmp_clrbit — 비트 지우기
  • gmp_cmp — 숫자 비교
  • gmp_com — 1의 보수 계산
  • gmp_divgmp_div_q 의 별칭
  • gmp_div_q — 숫자 나누기
  • gmp_div_qr — 숫자를 나누고 몫과 나머지 구하기
  • gmp_div_r — 숫자 나눗셈의 나머지
  • gmp_divexact — 숫자의 정확한 나눗셈
  • gmp_export — 이진 문자열로 내보내기
  • gmp_fact — 팩토리얼
  • gmp_gcd — GCD(최대공약수) 계산
  • gmp_gcdext — GCD와 배수 계산
  • gmp_hamdist — 해밍 거리
  • gmp_import — 이진 문자열에서 가져오기
  • gmp_init — GMP 숫자 생성
  • gmp_intval — GMP 숫자를 정수로 변환
  • gmp_invert — 모듈로 역(inverse by modulo)
  • gmp_jacobi — 야코비 기호
  • gmp_kronecker — 크로네커 기호
  • gmp_lcm — LCM(최소공배수) 계산
  • gmp_legendre — 르장드르 기호
  • gmp_mod — 모듈로 연산
  • gmp_mul — 숫자 곱하기
  • gmp_neg — 숫자 부호 반전
  • gmp_nextprime — 다음 소수 찾기
  • gmp_or — 비트 OR
  • gmp_perfect_power — 완전 거듭제곱 확인
  • gmp_perfect_square — 완전 제곱 확인
  • gmp_popcount — 인구수(population count)
  • gmp_pow — 숫자 거듭제곱
  • gmp_powm — 모듈로와 함께 숫자 거듭제곱
  • gmp_prob_prime — '아마도 소수'인지 확인
  • gmp_random — 난수
  • gmp_random_bits — 난수
  • gmp_random_range — 균일하게 선택된 정수 가져오기
  • gmp_random_seed — RNG 시드 설정
  • gmp_root — n제곱근의 정수 부분
  • gmp_rootrem — n제곱근의 정수 부분과 나머지
  • gmp_scan0 — 0 스캔
  • gmp_scan1 — 1 스캔
  • gmp_setbit — 비트 설정
  • gmp_sign — 숫자의 부호
  • gmp_sqrt — 제곱근 계산
  • gmp_sqrtrem — 나머지가 있는 제곱근
  • gmp_strval — GMP 숫자를 문자열로 변환
  • gmp_sub — 숫자 빼기
  • gmp_testbit — 비트가 설정되었는지 검사
  • gmp_xor — 비트 XOR

GMP 클래스

  • GMP — GMP 클래스
  • GMP::__construct — GMP 숫자 생성
  • GMP::__serialize — GMP 객체 직렬화
  • GMP::__unserialize — data 매개변수를 GMP 객체로 역직렬화

더 알아보기

  • 큰 정수 연산이 잦다면 GMP가 BCMath보다 빠른 편이에요. 다만 GMP는 정수 전용이므로 정밀한 소수 계산은 BCMath를 써야 해요.