WIPIVERSE

GMP (라이브러리)

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는 고성능 임의 정밀도 연산이 요구되는 다양한 소프트웨어에서 핵심 구성 요소로 널리 채택되고 있다.

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기