GNU Multiple Precision Arithmetic Library - GNU Multiple Precision Arithmetic Library
![]() | |
Vývojáři | Projekt GNU |
---|---|
První vydání | 1991[1] |
Stabilní uvolnění | 6.2.1 (14. listopadu 2020[2]) [±] |
Úložiště | gmplib |
Napsáno | C, (C ++, shromáždění volitelně) |
Typ | Matematický software |
Licence | Dvojí LGPLv3 a GPLv2[3] |
webová stránka | gmplib |
GNU Multiple Precision Arithmetic Library (GMP) je volný, uvolnit knihovna pro aritmetika s libovolnou přesností, pracující na podepsané celá čísla, racionální čísla, a plovoucí bod čísla.[3] Neexistují žádná praktická omezení přesnosti, kromě těch, která vyplývají z dostupných Paměť (operandy mohou být až 232−1 bitů na 32bitových počítačích a 237 bitů na 64bitových počítačích).[4][5] GMP má bohatou sadu funkcí a funkce mají pravidelné rozhraní. Základní rozhraní je pro C ale obálky existují pro jiné jazyky včetně Ada, C ++, C#, Julie, .SÍŤ, OCaml, Perl, PHP, Krajta, R, Rubín a Wolfram jazyk. Před rokem 2008 Kaffe, a Virtuální stroj Java, používá GMP k podpoře vestavěné libovolné přesnosti aritmetiky Java.[6] Krátce poté byla přidána podpora GMP GNU Classpath.[7]
Hlavní cílové aplikace GMP jsou kryptografie aplikace a výzkum, aplikace zabezpečení internetu a systémy počítačové algebry.
GMP si klade za cíl být rychlejší než kterýkoli jiný bignum knihovna pro všechny velikosti operandů. Některé důležité faktory při tom jsou:
- Plné využití slova jako základní aritmetický typ.
- Používání různých algoritmy pro různé operand velikosti; algoritmy, které jsou rychlejší pro velmi velká čísla, jsou obvykle pomalejší pro malá čísla.
- Vysoce optimalizováno montážní jazyk kód pro nejdůležitější vnitřní smyčky, specializující se na různé procesory.
První vydání GMP bylo vydáno v roce 1991. Je neustále vyvíjeno a udržováno.[8]
GMP je součástí GNU projekt (i když jeho webové stránky mimo gnu.org mohou způsobit nejasnosti) a je distribuován pod GNU Lesser General Public License (LGPL).
GMP se v mnoha používá pro celočíselnou aritmetiku systémy počítačové algebry jako Mathematica[9] a Javor.[10] Používá se také v Knihovna algoritmů výpočetní geometrie (CGAL), protože algoritmy geometrie mají tendenci „explodovat“ při použití běžné matematické CPU s plovoucí desetinnou čárkou.[11]
GMP je nutný k sestavení Sbírka překladačů GNU (GCC).[12]
Příklady
Zde je příklad kódu C, který ukazuje použití knihovny GMP pro násobení a tisk velkých čísel:
#zahrnout <stdio.h>#zahrnout <gmp.h>int hlavní(prázdnota) { mpz_t X, y, výsledek; mpz_init_set_str(X, "7612058254738945", 10); mpz_init_set_str(y, "9263591128439081", 10); mpz_init(výsledek); mpz_mul(výsledek, X, y); gmp_printf("% Zd n" "* n" "% Zd n" "-------------------- n" "% Zd n", X, y, výsledek); / * volná využitá paměť * / mpz_clear(X); mpz_clear(y); mpz_clear(výsledek); vrátit se 0;}
Tento kód vypočítá hodnotu 7612058254738945 × 9263591128439081.
Kompilace a spuštění tohoto programu dává tento výsledek. (The -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 ++. (The -lgmpxx -lgmp
příznaky se používají při kompilaci na systémech typu Unix.)
#zahrnout <iostream>#zahrnout <gmpxx.h>int hlavní() { mpz_class X("7612058254738945"); mpz_class y("9263591128439081"); std::cout << " " << X << " n" << "* n" << " " << y << " n" << "-------------------- n" << X * y << " n"; vrátit se 0;}
Jazykové vazby
Viz také
- GNU MPFR - knihovna pro libovolně přesné výpočty se správným zaokrouhlováním na základě 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 Windows
Reference
- ^ „Archiv GNU MP“. Citováno 2018-12-03.
- ^ V6.2.1 - „Knihovna GNU MP Bignum“. Citováno 2020-11-15.
- ^ A b „Co je to GMP?“. Citováno 2014-04-07.
- ^ Granlund, Torbjorn (06.07.2009). "Problémy s mpz_set_str a obrovskými řetězci". Citováno 2013-03-17.
- ^ „Novinky GMP 6.0“. Citováno 2019-10-04.
- ^ Hughes, Andrew John (2008-02-28). „Odebrána matematika GMP?“. Citováno 2013-03-17.
- ^ „GNU Classpath 0,98“ Lepší pozdě než nikdy"". 2009-02-05. Citováno 2013-03-17.
- ^ „Knihovna GNU MP Bignum“. Citováno 2018-12-03.
- ^ „Jádro Mathematica: Problémy při návrhu a implementaci“. Říjen 2006. Citováno 2013-03-17.
- ^ „Knihovna GNU Multiple Precision (GMP)“. Maplesoft. Citováno 2013-03-17.
- ^ „Příručky CGAL“.
- ^ GCC používá GNU MPFR knihovna, která se spoléhá na GMP. „Série vydání GCC 4.3: Změny, nové funkce a opravy“. 2012-11-02. Citováno 2013-03-17.