GNU Multiple Precision rekenkundige bibliotheek
gmp | |
---|---|
![]() | |
Basis data | |
ontwikkelaar | Stichting Vrije Software |
Jaar van uitgave | 1991[1] |
Huidige versie | 6.2.0 (17 januari 2020 [2] ) |
besturingssysteem | Unix , GNU/Linux |
programmeertaal | C , assembler |
categorie | Standaard C-bibliotheek |
Licentie | LGPL |
www.gmplib.org |
De GNU Multiple Precision Arithmetic Library ( GMP ) is een programmeerbibliotheek die rekenfuncties implementeert voor willekeurig nauwkeurige / grote getallen. De eerste versie van GMP verscheen in 1991 . Sindsdien is de bibliotheek continu uitgebreid en verbeterd en gepubliceerd in een jaarlijkse uitgave . GMP is een officieel onderdeel van het GNU-project , valt onder de LGPL en is dus vrije software . Computeralgebrasystemen die GMP gebruiken zijn bijvoorbeeld Maple [3] en Mathematica [4] .
Beperkingen
De mogelijkheden van GMP met betrekking tot de grootte van de getallen worden alleen beperkt door het RAM of virtueel geheugen dat in de computer aanwezig is . Ondanks de emulatie van de hardwareberekeningen in de vorm van software-algoritmen, blijft GMP relatief snel, omdat het op veel plaatsen werd geoptimaliseerd met behulp van assembler-instructies .
Bereik van functies
Het scala aan functies van GMP is onderverdeeld in zeven categorieën.
- Rekenkundige en logische functies voor getekende gehele getallen (ongeveer 140 functies)
- Rekenfuncties voor rationale getallen (ca. 35 functies)
- Rekenfuncties voor getallen met drijvende komma (ca. 65 functies)
- C++ wrapper-klassen voor de bovenstaande functies
- Rekenfuncties voor gehele getallen zonder teken waarvoor de gebruiker zelf geheugenbeheer moet implementeren
- Functies voor het afronden van getallen met drijvende komma
- Functies voor compatibiliteit met het Berkeley MP-project
Voorbeeld van gebruik
De GMP heeft drie hoofdgegevenstypen: mpz_t
voor elk groot geheel getal , mpf_t
voor elk groot getal met drijvende komma met veranderlijke, ook extreem hoge precisie en mpq_t
voor de weergave van getallen als een breuk . Aan de GMP-variabelen kunnen niet zomaar waarden worden toegekend zoals bij normale datatypes, maar er moeten wel speciale functies worden aangeroepen (zie overzicht). De volgende broncode illustreert het basisgebruik van GMP:
#include <gmp.h>
int hoofd ( nietig )
{
mpz_t een ; // Declareer GMP integer-variabele
mpf_t b ; // Declareer GMP drijvende-kommavariabele
mpq_t c ; // Declareer GMP-fractievariabele
mpz_init ( een ); // Initialiseer GMP integer-variabele
mpf_init ( b ); // Initialiseer GMP drijvende-kommavariabele
mpq_init ( c ); // Initialiseer GMP-fractievariabele
mpz_set_ui ( a , 1337 ); // Stel GMP integer variabele in op een unsigned integer waarde
mpz_set_str ( a , "4242424242" , 10 ); // Een andere mogelijkheid om een MPZ-variabele in te stellen, b.v. B.
// als het waardebereik van unsigned int te klein is. 10 is de basis
mpf_set_d ( b , 3.14159265358 ); // Stel GMP drijvende-kommavariabele in op een dubbele waarde
mpf_set_str ( b , "3.141592653589793238462643383279502" , 10 ); // zoals mpz_set_str ();
mpq_set_ui ( c , 23423 , 11123 ); // stel c in op de waarde van de breuk (23423/11123)
mpq_canonicalize ( c ); // Moet worden gedaan om gemeenschappelijke factoren te verwijderen
// en corrigeer de tekens
retourneer 0 ;
}
Belangrijke functies van GMP zijn onder meer:
#include <gmp.h>
int hoofd ( nietig )
{
// De eerder gedeclareerde variabelen zijn geldig
// Meestal identieke functies zijn ook beschikbaar voor mpf en mpq (verwissel gewoon prefix)
mpz_t d , e ;
mpz_init_set_str ( d , "133742" , 10 ); // Gecombineerde initialisatie- en toewijzingsfunctie
mpz_init ( e );
mpz_add ( e , a , d ); // Voeg a en d toe en wijs het resultaat toe aan de variabele e
gmp_printf ( "% Zd \ n " , e ); // gmp_printf () is gelijk aan printf (), geeft alleen GMP-variabelen weer
mpz_mul ( a , e , d ); // vermenigvuldig e en d en wijs a . toe
mpz_add_ui ( d , a , 421337 ); // Voeg a en de unsigned-long-int waarde 421337 toe en wijs d . toe
retourneer 0 ;
}
web links
- Officiële GMP-website inclusief documentatie in HTML en PDF
- Officiële website van het GNU-project
- MPIR - Een fork van libGMP om Microsoft Windows beter te ondersteunen
Individueel bewijs
- ↑ gmplib.org. " De eerste GMP-release werd gemaakt in 1991. "
- ↑ Wijzigingen in GMP 6.2.0 ( pagina niet meer beschikbaar , zoeken in webarchief ) Info: de link werd automatisch als defect gemarkeerd. Controleer de link volgens de instructies en verwijder deze melding.
- ^ De GNU Multiple Precision (GMP) bibliotheek. Geraadpleegd op 1 maart 2017.
- ^ De Mathematica Kernel: Kwesties in het ontwerp en de uitvoering. Lezing tekst. Geraadpleegd op 14 november 2016.