GNU 다중 정밀도 산술 라이브러리

GNU Multiple Precision Arithmetic Library
GNU 다중 정밀도 산술 라이브러리
GMPLogo.svg
개발자GNU 프로젝트
초기 릴리즈1991년; 31년 전(1991년)[1]
안정된 릴리스
6.2[2].1 / 2020년 11월 14일
저장소gmplib.org/repo/
기입처C, (C++, 어셈블리 옵션)
유형수학 소프트웨어
면허증.듀얼 LGPLv3GPLv2[3]
웹 사이트gmplib.org

GNU Multiple Precision 산술 라이브러리(GMP)는 부호 있는 정수, 유리수부동소수점 [3]숫자로 작동하는 임의 정밀도 산술용 무료 라이브러리입니다.사용 가능한 메모리에 포함된 것 이외에는 정밀도에 실질적인 제한이 없습니다(32비트 머신에서는 오퍼랜드가 최대 2-1비트32, 64비트37 [4][5]머신에서는 최대 2비트).GMP에는 풍부한 기능 세트가 있으며 기능에는 표준 인터페이스가 있습니다.기본 인터페이스는 C용이지만 래퍼Ada, C++, C#, Julia 등 다른 언어용으로 존재합니다.NET, OCaml, Perl, PHP, Python, R, Ruby Rust.2008년 이전에는 Java 가상 머신Kaffe가 GMP를 사용하여 Java에 내장된 임의 정밀도 [6]계산을 지원했습니다.얼마 지나지 않아 GMP 지원이 GNU [7]Classpath에 추가되었습니다.

GMP의 주요 타깃 애플리케이션은 암호 애플리케이션 및 연구, 인터넷 보안 애플리케이션 및 컴퓨터 대수 시스템입니다.

GMP는 모든 피연산자 크기에서 다른 어떤 bignum 라이브러리보다 빠른 것을 목표로 합니다.여기에는 다음과 같은 중요한 요소가 있습니다.

최초의 GMP 릴리스는 1991년에 작성되었습니다.그것은 지속적으로 개발되고 [8]유지된다.

GMP는 GNU 프로젝트의 일부이며(웹사이트가 gnu.org에서 벗어나면 혼동을 일으킬 수 있지만), GNU Lesser General Public License(LGPL)에 따라 배포됩니다.

GMP는 매스매티카[9] [10]메이플과 같은 많은 컴퓨터 대수 시스템에서 정수 산술에 사용됩니다.CGAL(Computational Geometry Algorithms Library)에서도 사용됩니다.

GNU 컴파일러 컬렉션(GCC)[11]을 구축하려면 GMP가 필요합니다.

다음으로 GMP 라이브러리를 사용하여 큰 숫자를 곱하여 인쇄하는 C 코드의 예를 나타냅니다.

#실패하다 <stdio.h> #실패하다 <gmp.h>  인트 주된(무효) {   mpz_t x, y, 결과;    mpz_init_set_str(x, "7612058254738945", 10);   mpz_init_set_str(y, "9263591128439081", 10);   mpz_init(결과);    mpz_mul(결과, x, y);   gmp_printf(" %Zd\n"              "*\n"              " %Zd\n"              "--------------------\n"              %Zd\n", x, y, 결과);    /* 빈 사용 메모리 */   mpz_clear(x);   mpz_clear(y);   mpz_clear(결과);    돌아가다 0; } 

이 코드는 7612058254738945 × 9263591128439081의 값을 계산합니다.

이 프로그램을 컴파일하여 실행하면 다음과 같은 결과가 나타납니다.-lgmp플래그는 Unix 타입 시스템에서 컴파일할 때 사용됩니다.)

    7612058254738945 * 9263591128439081 ------------------------------------------------------------------------------------------------------------------------------

비교를 위해 다음과 같은 동등한 C++ 프로그램을 대신 쓸 수 있다.(the.-lgmpxx -lgmp플래그는 Unix 타입 시스템에서 컴파일 할 때 사용됩니다.)

#실패하다 <iostream> #실패하다 <gmpxx.h>  인트 주된() {   mpz_class x("7612058254738945");   mpz_class y("9263591128439081");    표준::외치다 << > "    " << > x << > "\n"             << > "*\n"             << > "    " << > y << > "\n"             << > "--------------------\n"             << > x * y << > "\n";    돌아가다 0; } 

언어 바인딩

라이브러리명 언어 면허증.
GNU Multi-Precision 라이브러리 C, C++ LGPL
연산:: GMP LGPL
산술::GMPz, 산술::GMPf산술:GMPq Artistic License v1.0 + GPL v1.0 이후
일반 다중 정밀 Python 프로젝트 파이썬 LGPL
R 패키지 'gmp' R GPL
루비젬스 프로젝트 루비 아파치 2.0
GMP, MPFR 및 MPC의 Rust FFI 바인딩 LGPL
PHP용 GNU Multi-Precision 라이브러리 PHP PHP
SBCL용 GNU Multi-Precision 루틴 일반적인 리스프 퍼블릭 도메인
Ch GMP 독자 사양
BMDFM용 병렬 GMP 래퍼 BMDFM LISP / C 퍼블릭 도메인
글래스고 해스켈 컴파일러
(의 실장Integer
기본적으로는 GMP에 대한 바인딩입니다).
하스켈 BSD
luajit-gmp LuaJIT MIT
gmp-delphi의 경우 델파이 MIT
자릿수 OCaml LGPL
수학 Gmp네이티브 라이브러리 .그물 MIT
nim-gmp MIT

「 」를 참조해 주세요.

  • GNU MPFR – GNU MP를 기반으로 정확한 반올림을 통해 임의의 정밀도를 계산하는 라이브러리
  • CLN – 임의의 정밀도를 위한 클래스 라이브러리
  • MPIR – GMP 포크, 더 이상 유지 보수되지 않음

레퍼런스

  1. ^ "GNU MP archive". Retrieved 2018-12-03.
  2. ^ "GMP 6.2.1 출시"; 저자명 문자열: Marco Bodrato; 발행일: 2020년 11월 14일; 취득일: 2020년 11월 15일.
  3. ^ a b "What is GMP?". Retrieved 2014-04-07.
  4. ^ Granlund, Torbjorn (2009-07-06). "Problems with mpz_set_str and huge strings". Retrieved 2013-03-17.
  5. ^ "GMP 6.0 News". Retrieved 2019-10-04.
  6. ^ Hughes, Andrew John (2008-02-28). "Removed GMP math?". Retrieved 2013-03-17.
  7. ^ "GNU Classpath 0.98 "Better Late Than Never"". 2009-02-05. Retrieved 2013-03-17.
  8. ^ "GNU MP Bignum Library". Retrieved 2018-12-03.
  9. ^ "The Mathematica Kernel: Issues in the Design and Implementation". October 2006. Retrieved 2013-03-17.
  10. ^ "The GNU Multiple Precision (GMP) Library". Maplesoft. Retrieved 2013-03-17.
  11. ^ GCC는 GNU MPFR 라이브러리를 사용합니다.이 라이브러리는 GMP에 의존합니다.

외부 링크