GNU Multiple Precision(GMP)
GNU Multiple Precision(GMP)
자릿수 제한 없이 아주 큰 정수를 다뤄야 하는 경우가 있어요. BCMath가 문자열 기반이라면, GMP는 GNU MP 라이브러리 기반으로 더 빠르게 임의 길이의 정수를 처리해 줘요.
본문
GMP 함수들은 GNU MP 라이브러리를 사용해 임의 길이의 정수(arbitrary-length integers)를 다룰 수 있게 해 줘요.
몇 가지 알아둘 점이 있어요.
- 대부분의 GMP 함수는 GMP 숫자 인자를 받아요. 문서에서는 이를
GMP객체로 표기해요. 대부분의 함수는 숫자나 문자열 인자도 받아들이는데, 문자열이 숫자로 변환 가능하다면 말이죠. 또한 인자(정수만)에 대해 더 성능이 좋은 함수가 있다면 그 함수가 대신 사용돼요(이 과정은 투명하게 일어나요).gmp_init()함수도 함께 확인해 보세요. gmp_init()및 다른 GMP 함수가 반환한GMP객체에는 산술, 비트, 비교 연산자를 그대로 사용할 수 있어요.- 큰 정수는 반드시 문자열로 지정해야 해요. 그렇지 않으면 PHP가 float로 변환하면서 정밀도를 잃게 돼요.
GMP 함수들
gmp_abs— 절댓값gmp_add— 숫자 더하기gmp_and— 비트 ANDgmp_binomial— 이항 계수 계산gmp_clrbit— 비트 지우기gmp_cmp— 숫자 비교gmp_com— 1의 보수 계산gmp_div—gmp_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— 비트 ORgmp_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를 써야 해요.