GNU Multiple Precision Arithmetic Library

GNU Multiple Precision Arithmetic Library

Die GNU Multiple Precision Arithmetic Library ist eine Programmierbibliothek, die arithmetische Funktionen für beliebig große Zahlen implementiert. Die erste Version von GMP erschien 1991. Seitdem wird die Bibliothek ständig erweitert und verbessert und in einem jährlichen Release herausgegeben (aktuelles Release: Version 5.0.2). GMP ist offizieller Teil des GNU-Projekts, steht unter der LGPL und ist somit freie Software.

Inhaltsverzeichnis

Beschränkungen

Die Möglichkeiten von GMP in Bezug auf die Größe der Zahlen ist einzig und allein durch den im Computer verfügbaren Arbeitsspeicher bzw. virtuellen Speicher begrenzt. Trotz der Emulation der Hardwareberechnungen in Form von Softwarealgorithmen bleibt GMP verhältnismäßig schnell, da an vielen Stellen mit Hilfe von Assembleranweisungen optimiert wurde.

Funktionsumfang

Der Funktionsumfang von GMP ist in sieben Kategorien unterteilt.

  • Arithmetische und logische Funktionen für vorzeichenbehaftete Integer (ca. 140 Funktionen)
  • Arithmetische Funktionen für rationale Zahlen (ca. 35 Funktionen)
  • Arithmetische Funktionen für Gleitkommazahlen (ca. 65 Funktionen)
  • C++ Wrapper-Klassen für obige Funktionen
  • Arithmetische Funktionen für vorzeichenlose Integer, für die der Benutzer die Speicherverwaltung selbst implementieren muss
  • Funktionen zur Rundung von Gleitkommazahlen
  • Funktionen für die Kompatibilität zum Berkeley MP Projekt

Beispiel zur Verwendung

Die GMP besitzt drei Hauptdatentypen: mpz_t (beliebig große Integer), mpf_t (beliebig große Gleitkommazahl mit änderbarer, auch extrem großer Präzision) und mpq_t (Darstellung von Zahlen als Bruch). Den GMP-Variablen können nicht einfach Werte zugewiesen werden (wie bei normalen Datentypen), sondern es müssen spezielle Funktionen gerufen werden (siehe Listing). Der folgende Quelltext veranschaulicht den grundlegenden Gebrauch der GMP:

# include <gmp.h>
 
int main(void)
{
    mpz_t a; // Deklariere GMP-Ganzzahlvariable
    mpf_t b; // Deklariere GMP-Fliesskommavariable
    mpq_t c; // Deklariere GMP-Bruchvariable
 
    mpz_init(a); // Initialisiere GMP-Ganzzahlvariable
    mpf_init(b); // Initialisiere GMP-Fliesskommavariable
    mpq_init(c); // Initialisiere GMP-Bruchvariable
 
    mpz_set_ui(a,1337); // Setze GMP-Ganzzahlvariable auf einen unsigned-integer-Wert
    mpz_set_str(a,"4242424242",10); // Andere Moeglichkeit, eine MPZ-Variable zu setzen, z.B.
                                    // falls der Wertebereich von unsigned int zu klein ist. 10 ist die Basis
 
    mpf_set_d(b,3.14159265358); // GMP-Fliessvariable auf einen double-Wert setzen
    mpf_set_str(b,"3.141592653589793238462643383279502",10); // Wie mpz_set_str();
 
    mpq_set_ui(c,23423,11123); // Setze c auf den Wert des Bruchs (23423/11123)
    mpq_canonicalize(c);       // Muss durchgefuehrt werden, um gemeinsame Teiler zu entfernen
                               // und die Vorzeichen zu berichtigen
 
    return(0);
}

Wichtige Funktionen der GMP sind unter anderem:

# include <gmp.h>
 
int main(void)
{
    // Die vorher deklarierten Variablen seien geltend
    // Weitestgehend identische Funktionen sind auch fuer mpf und mpq verfuegbar (einfach Praefix austauschen)
    mpz_t d,e;
    mpz_init_set_str(d,"133742",10); // Kombinierte Initialisierungs- und Zuweisungsfunktion
    mpz_init(e);
 
    mpz_add(e,a,d); // a und d addieren und das Ergebnis der Variable e zuweisen
 
    gmp_printf("%Zd\n",e);  // gmp_printf() ist aequivalent zu printf(), gibt nur eben GMP-Variablen aus
 
    mpz_mul(a,e,d); // e und d multiplizieren und a zuweisen
 
    mpz_add_ui(d,a,421337);  // a und den unsigned-long-int-Wert 421337 addieren und d zuweisen
}

Weblinks


Wikimedia Foundation.

Игры ⚽ Поможем решить контрольную работу

Schlagen Sie auch in anderen Wörterbüchern nach:

  • GNU Multiple Precision Arithmetic Library — GMP Desarrollador Proyecto GNU gmplib.org Información general Última versión estable 4.2.4 20 de septiembre de 2008 …   Wikipedia Español

  • GNU Multi-Precision Library — Infobox Software name = GNU Multiple Precision Library caption = developer = The GNU Project latest release version = 4.2.4 latest release date = September 20, 2008 programming language = C operating system = Cross platform genre = Mathematical… …   Wikipedia

  • Arbitrary-precision arithmetic — In computer science, arbitrary precision arithmetic indicates that calculations are performed on numbers whose digits of precision are limited only by the available memory of the host system. This contrasts with the faster fixed precision… …   Wikipedia

  • Matrix Template Library — Betriebssystem Linux, Unix, Mac OS X, Windows Programmier­sprache C++ Kategorie Wissenschaftliche Programmbibliothek Lizenz …   Deutsch Wikipedia

  • GNU Compiler Collection — Cc1 redirects here. For other uses of CC1 or CC 1, see CC1 (disambiguation). GNU Compiler Collection Developer(s) GNU Project Initial release May 23, 1987 ( …   Wikipedia

  • GNU Scientific Library — infobox software name = GNU Scientific Library developer = GNU Project latest release version = 1.11 latest release date = 31 March 2008 genre = Numerical library license = GNU General Public License website = http://www.gnu.org/software/gsl/In… …   Wikipedia

  • MPFR — GNU MPFR Entwickler INRIA und andere Aktuelle Version 3.0.1 (4. April 2011) Betriebssys …   Deutsch Wikipedia

  • PARI/GP — in use on Windows XP Developer(s) …   Wikipedia

  • GIMPS — Eine Mersenne Zahl ist eine Zahl der Form 2n − 1. Im Speziellen bezeichnet man mit Mn = 2n − 1 die n te Mersenne Zahl. Die Primzahlen unter den Mersenne Zahlen werden Mersenne Primzahlen genannt. Die ersten acht Mersenne Primzahlen Mp sind 3, 7,… …   Deutsch Wikipedia

  • GmP — ist eine Abkürzung für: Flughafen Gimpo in Südkorea (IATA Code) Garantierter Maximalpreis (Baubranche) generalisiertes motorisches Programm, eine Theorie aus der Motorik Global Marshall Plan, ein politischer Plan zur Entwicklungshilfe GNU… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”