GNU Multiple Precision rekenkundige bibliotheek

Van Wikipedia, de gratis encyclopedie
Spring naar navigatie Spring naar zoeken
gmp

GMPLogo.svg
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

Individueel bewijs

  1. gmplib.org. " De eerste GMP-release werd gemaakt in 1991. "
  2. Wijzigingen in GMP 6.2.0 @ 1 @ 2 Sjabloon: Toter Link / gmplib.org ( 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.
  3. ^ De GNU Multiple Precision (GMP) bibliotheek. Geraadpleegd op 1 maart 2017.
  4. ^ De Mathematica Kernel: Kwesties in het ontwerp en de uitvoering. Lezing tekst. Geraadpleegd op 14 november 2016.