GNU Multiple Precision Arithmetic Library
![]() | |
Entwickler (en) | GNU -Projekt |
---|---|
Erstveröffentlichung | 1991[1] |
Stabile Version | 6.2.1[2] ![]() |
Repository | GMPLIB |
Geschrieben in | C, (C ++, Montage optional) |
Typ | Mathematische Software |
Lizenz | Dual LGPLV3 und GPLV2[3] |
Webseite | GMPLIB |
GNU Multiple Precision Arithmetic Library (GMP) ist ein frei Bibliothek für willkürliche Präzisionsarithmetik, operieren auf unterzeichnet Ganzzahlen, Rationale Zahlen, und Gleitkommazahlen.[3] Es gibt keine praktischen Grenzen für die Präzision, außer die von den verfügbaren implizierten, die implizierten Erinnerung (Operanden können bis zu 2 sein32–1 Bit auf 32-Bit-Maschinen und 237 Bits auf 64-Bit-Maschinen).[4][5] GMP hat eine Reihe von Funktionen und die Funktionen haben eine regelmäßige Schnittstelle. Die grundlegende Schnittstelle ist für C, aber Wrapper existieren für andere Sprachen, einschließlich Ada, C ++, C#, Julia, .NETZ, Ocaml, Perl, Php, Python, R, Rubin, und Rost. Vor 2008, Kaffe, a Java virtuelle Maschine, verwendet GMP, um die integrierte java-integrierte Präzisionsarithmetik zu unterstützen.[6] Kurz darauf wurde die GMP -Unterstützung hinzugefügt GNU -Klassenpfad.[7]
Die Hauptzielanwendungen von GMP sind Kryptographie Anwendungen und Forschung, Internet -Sicherheitsanwendungen und Computeralgebra -Systeme.
GMP zielt darauf ab, schneller als jeder andere zu sein Bignum Bibliothek für alle Operandengrößen. Einige wichtige Faktoren dabei sind:
- Verwenden von Voll Wörter als grundlegende arithmetische Typ.
- Verwenden von unterschiedlich Algorithmen für unterschiedlich Operand Größen; Algorithmen, die für sehr große Zahlen schneller sind, sind normalerweise langsamer für kleine Zahlen.
- Höchst optimiert Montagesprache Code für das Wichtigste innere Schleifen, spezialisiert für verschiedene Prozessoren.
Die erste GMP -Veröffentlichung wurde 1991 erstellt. Sie wurde ständig entwickelt und aufrechterhalten.[8]
GMP ist Teil der GNU Projekt (obwohl die Website von gnu.org zu Verwirrung führen kann) und unter dem verteilt wird Gnu weniger allgemeine öffentliche Lizenz (LGPL).
GMP wird für eine ganzzahlige Arithmetik in vielen verwendet Computeralgebra -Systeme wie zum Beispiel Mathematica[9] und Ahorn.[10] Es wird auch in der verwendet Computergeometrie -Algorithmenbibliothek (CGAL).
GMP wird benötigt, um die zu bauen GNU Compiler -Sammlung (GCC).[11]
Beispiele
Hier ist ein Beispiel für den C -Code, der die Verwendung der GMP -Bibliothek zum Multiplizieren und Drucken großer Zahlen zeigt:
#enthalten #enthalten int hauptsächlich(Leere) { mpz_t x, y, Ergebnis; mpz_init_set_str(x, "7612058254738945", 10); mpz_init_set_str(y, "9263591128439081", 10); mpz_init(Ergebnis); mpz_mul(Ergebnis, x, y); gmp_printf(" %Zd\n" "*\n" " %Zd\n" "--------------------\n" "%Zd\n", x, y, Ergebnis); / * kostenloser gebrauchter Speicher *// mpz_clear(x); mpz_clear(y); mpz_clear(Ergebnis); Rückkehr 0; }
Dieser Code berechnet den Wert von 7612058254738945 × 9263591128439081.
Das Kompilieren und Ausführen dieses Programms gibt dieses Ergebnis. (Das -lgmp
Flag wird verwendet, wenn das Kompilieren von Unix-Typ-Systemen kompiliert wird.)
7612058254738945 * 9263591128439081 -------------------- 70514995317761165008628990709545
Zum Vergleich kann man stattdessen das folgende äquivalente C ++ -Programm schreiben. (Das -lgmpxx -lgmp
FLAGs werden verwendet, wenn Sie auf Unix-Typ-Systemen zusammenstellen.)
#enthalten #enthalten int hauptsächlich() { mpz_class x("7612058254738945"); mpz_class y("9263591128439081"); std::Cout << "" " << x << "\n" << "*\n" << "" " << y << "\n" << "--------------------\n" << x * y << "\n"; Rückkehr 0; }
Sprachbindungen
Bibliotheksname | Sprache | Lizenz |
---|---|---|
GNU Multi-Repecision-Bibliothek | C, C ++ | LGPL |
Math :: Gmp | Perl | LGPL |
Math :: Gmpz, Math :: Gmpf und Math :: Gmpq | Perl | Künstlerische Lizenz v1.0 + Gpl v1.0-or-later |
Allgemeines Multipkrezision Python -Projekt | Python | LGPL |
R -Paket 'GMP' | R | Gpl |
Das Rubygemems -Projekt | Rubin | Apache 2.0 |
Rost -FFI -Bindungen für GMP, MPFR und MPC | Rost | LGPL |
GNU-Multi-Repräsentation-Bibliothek für PHP | Php | Php |
GNU-Multi-Präzisionsroutinen für SBCL | Common Lisp | Öffentlich zugänglich |
Ch Gmp | CH | Proprietär |
Parallele GMP -Wrapper für BMDFM | BMDFM Lisp / C. | Öffentlich zugänglich |
Glasgow Haskell Compiler (Die Implementierung von Ganze Zahl ist im Grunde eine Bindung an GMP) | Haskell | BSD |
luajit-gmp | Luajit | MIT |
GMP-Wrapper-für-Delphi | Delphi | MIT |
Zarith | Ocaml | LGPL |
Math.gmp.native Bibliothek | .NETZ | MIT |
nim-gmp | Nim | MIT |
Siehe auch
- GNU MPFR -eine Bibliothek für willkürliche Berechnungen mit korrekter Rundung, basierend auf GNU MP
- Cln - eine Klassenbibliothek für willkürliche Präzision
- MPIR - Eine GMP -Gabel, die nicht mehr gepflegt wurde
Verweise
- ^ "GNU MP Archiv". Abgerufen 2018-12-03.
- ^ "GMP 6.2.1 veröffentlicht"; Autorenname String: Marco Bodrato; Veröffentlichungsdatum: 14. November 2020; Abgerufen: 15. November 2020.
- ^ a b "Was ist GMP?". Abgerufen 2014-04-07.
- ^ Granlund, Torbjorn (2009-07-06). "Probleme mit mpz_set_str und riesigen Zeichenfolgen". Abgerufen 2013-03-17.
- ^ "GMP 6.0 Nachrichten". Abgerufen 2019-10-04.
- ^ Hughes, Andrew John (2008-02-28). "GMP -Mathematik entfernt?". Abgerufen 2013-03-17.
- ^ "GNU ClassPath 0,98" Besser spät als nie "". 2009-02-05. Abgerufen 2013-03-17.
- ^ "GNU MP Bignum Library". Abgerufen 2018-12-03.
- ^ "Der Mathematica -Kernel: Probleme in der Gestaltung und Implementierung".Oktober 2006. Abgerufen 2013-03-17.
- ^ "Die GNU Multiple Precision (GMP) -Bibliothek". Maplesoft. Abgerufen 2013-03-17.
- ^ GCC verwendet das GNU MPFR Bibliothek, die wiederum auf GMP beruht. "GCC 4.3 Release -Serie: Änderungen, neue Funktionen und Fixes". 2012-11-02. Abgerufen 2013-03-17.