GNU Multiple Precision Arithmetic Library

GNU Multiple Precision Arithmetic Library
GMPLogo.svg
Entwickler (en) GNU -Projekt
Erstveröffentlichung 1991; Vor 31 Jahren[1]
Stabile Version
6.2.1[2] Edit this on Wikidata/ 14. November 2020
Repository GMPLIB.org/Repo/
Geschrieben in C, (C ++, Montage optional)
Typ Mathematische Software
Lizenz Dual LGPLV3 und GPLV2[3]
Webseite GMPLIB.org

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:

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

  1. ^ "GNU MP Archiv". Abgerufen 2018-12-03.
  2. ^ "GMP 6.2.1 veröffentlicht"; Autorenname String: Marco Bodrato; Veröffentlichungsdatum: 14. November 2020; Abgerufen: 15. November 2020.
  3. ^ a b "Was ist GMP?". Abgerufen 2014-04-07.
  4. ^ Granlund, Torbjorn (2009-07-06). "Probleme mit mpz_set_str und riesigen Zeichenfolgen". Abgerufen 2013-03-17.
  5. ^ "GMP 6.0 Nachrichten". Abgerufen 2019-10-04.
  6. ^ Hughes, Andrew John (2008-02-28). "GMP -Mathematik entfernt?". Abgerufen 2013-03-17.
  7. ^ "GNU ClassPath 0,98" Besser spät als nie "". 2009-02-05. Abgerufen 2013-03-17.
  8. ^ "GNU MP Bignum Library". Abgerufen 2018-12-03.
  9. ^ "Der Mathematica -Kernel: Probleme in der Gestaltung und Implementierung".Oktober 2006. Abgerufen 2013-03-17.
  10. ^ "Die GNU Multiple Precision (GMP) -Bibliothek". Maplesoft. Abgerufen 2013-03-17.
  11. ^ 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.

Externe Links