GMP(GNU Multiple Precision Arithmetic Library)는 임의 정밀도 정수, 유리수 및 부동소수점 연산을 제공하는 자유 소프트웨어 라이브러리이다. 주로 C 프로그램 언어로 구현되었으며, 성능을 높이기 위해 다양한 CPU 아키텍처(x86, x86‑64, ARM, PowerPC 등)에 최적화된 어셈블리 코드가 포함된다.
주요 특징
- 임의 정밀도 연산: 비트 단위까지 확장 가능한 정수, 유리수, 부동소수점 연산을 지원한다.
- 다양한 데이터 형식:
mpz_t(정수),mpq_t(유리수),mpf_t(부동소수점)와 같은 타입을 제공한다. - 멀티플랫폼 지원: 리눅스, macOS, 윈도우 등 주요 운영체제에서 사용할 수 있다.
- 언어 바인딩: C 외에도 C++(
gmpxx.h), Python(gmpy2), Ruby, Java 등 여러 프로그래밍 언어에 대한 바인딩이 제공된다. - 오픈 소스 라이선스: GNU LGPL(v3) 또는 GPL(v2) 중 선택하여 배포한다.
역사 및 개발
- 최초 개발자는 토르비아른 그랑룬드(Torbjörn Granlund)와 조셉 스테인스키(Josef Leydendorf) 등이다.
- 1991년에 처음 공개된 이후 지속적으로 기능 확장 및 최적화가 이루어졌다.
- 현재 최신 안정 버전은 공식 웹사이트(https://gmplib.org)에서 확인할 수 있다.
활용 분야
- 암호학: RSA, ECC 등 큰 소수와 모듈러 연산이 필요한 알고리즘 구현에 사용된다.
- 컴퓨터 대수 시스템: PARI/GP, SageMath, Mathematica 등의 내부 연산 엔진으로 채택된다.
- 과학·공학 계산: 고정밀 수치 해석 및 시뮬레이션에 활용된다.
사용 예시 (C)
#include <gmp.h>
int main(void) {
mpz_t a, b, result;
mpz_init_set_str(a, "12345678901234567890", 10);
mpz_init_set_str(b, "98765432109876543210", 10);
mpz_init(result);
mpz_add(result, a, b); // result = a + b
mpz_out_str(stdout, 10, result);
putchar('
');
mpz_clears(a, b, result, NULL);
return 0;
}
위 예시는 두 큰 정수를 더하고 결과를 10진수 문자열로 출력한다.
GMP는 고성능 임의 정밀도 연산이 요구되는 다양한 소프트웨어에서 핵심 구성 요소로 널리 채택되고 있다.