GNU 다중 정밀도 산술 라이브러리
GNU Multiple Precision Arithmetic Library![]() | |
개발자 | GNU 프로젝트 |
---|---|
초기 릴리즈 | [1] | 전(
안정된 릴리스 | 6.2[2].1 / 2020년 11월 14일 |
저장소 | gmplib |
기입처 | C, (C++, 어셈블리 옵션) |
유형 | 수학 소프트웨어 |
면허증. | 듀얼 LGPLv3 및 GPLv2[3] |
웹 사이트 | gmplib |
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 포크, 더 이상 유지 보수되지 않음
레퍼런스
- ^ "GNU MP archive". Retrieved 2018-12-03.
- ^ "GMP 6.2.1 출시"; 저자명 문자열: Marco Bodrato; 발행일: 2020년 11월 14일; 취득일: 2020년 11월 15일.
- ^ a b "What is GMP?". Retrieved 2014-04-07.
- ^ Granlund, Torbjorn (2009-07-06). "Problems with mpz_set_str and huge strings". Retrieved 2013-03-17.
- ^ "GMP 6.0 News". Retrieved 2019-10-04.
- ^ Hughes, Andrew John (2008-02-28). "Removed GMP math?". Retrieved 2013-03-17.
- ^ "GNU Classpath 0.98 "Better Late Than Never"". 2009-02-05. Retrieved 2013-03-17.
- ^ "GNU MP Bignum Library". Retrieved 2018-12-03.
- ^ "The Mathematica Kernel: Issues in the Design and Implementation". October 2006. Retrieved 2013-03-17.
- ^ "The GNU Multiple Precision (GMP) Library". Maplesoft. Retrieved 2013-03-17.
- ^ GCC는 GNU MPFR 라이브러리를 사용합니다.이 라이브러리는 GMP에 의존합니다.