GNU Multiple Precision Aritmetic Library - GNU Multiple Precision Arithmetic Library
Vývojáři | Projekt GNU |
---|---|
První vydání | 1991 |
Stabilní uvolnění | 6.2.1 (14. listopadu 2020 [±] | )
Úložiště | gmplib |
Napsáno | C , ( C ++ , sestavení volitelně) |
Typ | Matematický software |
Licence | Duální LGPLv3 a GPLv2 |
webová stránka | gmplib |
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ů:
- Použití úplných slov jako základního aritmetického typu.
- Použití různých algoritmů pro různé velikosti operandů ; algoritmy, které jsou rychlejší pro velmi velká čísla, jsou obvykle pomalejší pro malá čísla.
- Vysoce optimalizovaný kód jazyka sestavení pro nejdůležitější vnitřní smyčky , specializovaný pro různé procesory .
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. ( -lgmp
Pří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 -lgmp
Pří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