GNU Multiple Precision Aritmetic Library - GNU Multiple Precision Arithmetic Library

GNU Multiple Precision Aritmetic Library
GMPLogo.svg
Vývojáři Projekt GNU
První vydání 1991 ; Před 30 lety ( 1991 )
Stabilní uvolnění 6.2.1 (14. listopadu 2020 ; před 10 měsíci ) [±] ( 2020-11-14 )
Úložiště gmplib .org /repo /
Napsáno C , ( C ++ , sestavení volitelně)
Typ Matematický software
Licence Duální LGPLv3 a GPLv2
webová stránka gmplib .org

GNU Multiple Precision Arithmetic Library ( GMP ) je zdarma knihovna pro výpočty s libovolnou přesností , pracující na podepsané celá čísla , racionální čísla a čísla s plovoucí desetinnou čárkou . Neexistují žádná praktická omezení přesnosti kromě těch, která vyplývají z dostupné paměti (operandy mohou mít až 2 32 -1 bitů na 32bitových počítačích a 2 37 bitů na 64bitových počítačích). GMP má bohatou sadu funkcí a funkce mají běžné rozhraní. Základní rozhraní je pro C , ale obálky existují pro jiné jazyky, včetně Ada , C ++ , C# , Julia , .NET , OCaml , Perl , PHP , Python , R , Ruby a Rust . Před rokem 2008 Kaffe , virtuální stroj Java , používal GMP k podpoře vestavěné libovolné přesné aritmetiky v Javě. Krátce poté byla do GNU Classpath přidána podpora GMP .

Hlavními cílovými aplikacemi GMP jsou kryptografické aplikace a výzkum, aplikace pro zabezpečení internetu a systémy počítačové algebry .

Cílem GMP je být rychlejší než jakákoli jiná knihovna bignum pro všechny velikosti operandů. K tomu patří několik důležitých faktorů:

První vydání GMP bylo vydáno v roce 1991. Je neustále vyvíjeno a udržováno.

GMP je součástí projektu GNU (ačkoli jeho webové stránky mimo gnu.org mohou způsobit zmatek) a jsou distribuovány pod licencí GNU Lesser General Public License (LGPL).

GMP se používá pro celočíselnou aritmetiku v mnoha počítačových algebraických systémech, jako jsou Mathematica a Maple . Používá se také v knihovně algoritmů výpočetní geometrie (CGAL), protože algoritmy geometrie mají tendenci „explodovat“ při použití běžné matematiky CPU s pohyblivou řádovou čárkou.

K vytvoření kolekce kompilátorů GNU (GCC) je zapotřebí GMP .

Příklady

Zde je příklad kódu C, který ukazuje použití knihovny GMP ke znásobení a tisku velkých čísel:

#include <stdio.h>
#include <gmp.h>

int main(void) {
  mpz_t x, y, result;

  mpz_init_set_str(x, "7612058254738945", 10);
  mpz_init_set_str(y, "9263591128439081", 10);
  mpz_init(result);

  mpz_mul(result, x, y);
  gmp_printf("    %Zd\n"
             "*\n"
             "    %Zd\n"
             "--------------------\n"
             "%Zd\n", x, y, result);

  /* free used memory */
  mpz_clear(x);
  mpz_clear(y);
  mpz_clear(result);

  return 0;
}

Tento kód vypočítá hodnotu 7612058254738945 × 9263591128439081.

Kompilace a spuštění tohoto programu dává tento výsledek. ( -lgmpPříznak se používá při kompilaci na systémech typu Unix.)

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

Pro srovnání lze místo toho napsat následující ekvivalentní program C ++. ( -lgmpxx -lgmpPříznaky se používají při kompilaci na systémech typu Unix.)

#include <iostream>
#include <gmpxx.h>

int main() {
  mpz_class x("7612058254738945");
  mpz_class y("9263591128439081");

  std::cout << "    " << x << "\n"
            << "*\n"
            << "    " << y << "\n"
            << "--------------------\n"
            << x * y << "\n";

  return 0;
}

Jazykové vazby

Název knihovny Jazyk Licence
Knihovna GNU Multi-Precision C , C ++ LGPL
Matematika :: GMP Perl LGPL
Matematika :: GMPz , Matematika :: GMPf a Matematika :: GMPq Perl Umělecká licence v1.0 + GPL v1.0-nebo-novější
Obecný projekt Multiprecision Python Krajta LGPL
Balíček R 'gmp' R. GPL
Projekt RubyGems Rubín Apache 2.0
Rezavé vazby FFI pro GMP, MPFR a MPC Rez LGPL
GNU Multi-Precision Library pro PHP PHP PHP
Rutiny GNU s více přesnostmi pro SBCL Lisp Veřejná doména
Ch GMP Ch Proprietární
Paralelní obálka GMP pro BMDFM BMDFM LISP / C Veřejná doména
Kompilátor Glasgow Haskell
(Implementace Integer
je v podstatě vazbou na GMP)
Haskell BSD
luajit-gmp LuaJIT MIT
gmp-wrapper-for-delphi Delphi MIT
Zarith OCaml LGPL
Nativní knihovna Math.Gmp .SÍŤ MIT
nim-gmp Nim MIT

Viz také

  • GNU MPFR -knihovna pro libovolně přesné výpočty se správným zaokrouhlováním, založená na GNU MP
  • CLN - knihovna tříd pro libovolnou přesnost
  • MPIR -vidlice GMP s většinou kompatibilním rozhraním, jehož cílem je poskytnout kompilační systém založený na MSVC pro platformy Microsoft Windows

Reference

externí odkazy