<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=GNU_Multiple_Precision_Arithmetic_Library</id>
	<title>GNU Multiple Precision Arithmetic Library - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=GNU_Multiple_Precision_Arithmetic_Library"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=GNU_Multiple_Precision_Arithmetic_Library&amp;action=history"/>
	<updated>2026-05-18T10:37:55Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=GNU_Multiple_Precision_Arithmetic_Library&amp;diff=400943&amp;oldid=prev</id>
		<title>imported&gt;Aka: Tippfehler entfernt, Links optimiert, Kleinkram</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=GNU_Multiple_Precision_Arithmetic_Library&amp;diff=400943&amp;oldid=prev"/>
		<updated>2025-10-04T21:02:24Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Benutzer:Aka/Tippfehler_entfernt&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Benutzer:Aka/Tippfehler entfernt (Seite nicht vorhanden)&quot;&gt;Tippfehler entfernt&lt;/a&gt;, Links optimiert, Kleinkram&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Infobox Software&lt;br /&gt;
|Name                 = gmp&lt;br /&gt;
|Maintainer           = &lt;br /&gt;
|Logo                 = &lt;br /&gt;
|Screenshot           = &lt;br /&gt;
|Beschreibung         = &lt;br /&gt;
|Hersteller           = [[Free Software Foundation]]&lt;br /&gt;
|Erscheinungsjahr     = &lt;br /&gt;
|AktuelleVersion      = &amp;lt;!-- Wikidata --&amp;gt; &lt;br /&gt;
|Betriebssystem       = [[Unix]], [[GNU/Linux]]&lt;br /&gt;
|Programmiersprache   = &lt;br /&gt;
|Kategorie            = [[Standard C Library]]&lt;br /&gt;
|Lizenz               = [[GNU Lesser General Public License|LGPL]]&lt;br /&gt;
|Deutsch              = &lt;br /&gt;
|Website              = [https://gmplib.org/ www.gmplib.org]&lt;br /&gt;
|Dateien              = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Die &amp;#039;&amp;#039;&amp;#039;GNU Multiple Precision Arithmetic Library&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;GMP&amp;#039;&amp;#039;&amp;#039;) ist eine [[Programmbibliothek|Programmierbibliothek]], die arithmetische Funktionen für beliebig genaue/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 [[Entwicklungsstadium (Software)|Release]] herausgegeben. GMP ist offizieller Teil des [[GNU|GNU-Projekts]], steht unter der [[LGPL]] und ist somit [[freie Software]]. [[Computeralgebrasystem]]e, die GMP verwenden, sind beispielsweise [[Maple (Software)|Maple]]&amp;lt;ref&amp;gt;[https://www.maplesoft.com/support/help/AddOns/view.aspx?path=GMP The GNU Multiple Precision (GMP) Library. Aufgerufen am 1. März 2017.]&amp;lt;/ref&amp;gt; und [[Mathematica]]&amp;lt;ref&amp;gt;[http://library.wolfram.com/infocenter/Conferences/7518/Macalester_talk.txt The Mathematica Kernel: Issues in the Design and Implementation. Vorlesungstext. Aufgerufen am 14. November 2016.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Beschränkungen ==&lt;br /&gt;
Die Möglichkeiten von GMP in Bezug auf die Größe der Zahlen sind einzig und allein durch den im [[Computer]] verfügbaren [[Arbeitsspeicher]] bzw. [[Virtueller Speicher|virtuellen Speicher]] begrenzt.&lt;br /&gt;
&lt;br /&gt;
== Funktionsumfang ==&lt;br /&gt;
Der Funktionsumfang von GMP ist in sieben Kategorien unterteilt:&lt;br /&gt;
&lt;br /&gt;
* Arithmetische und logische Funktionen für vorzeichenbehaftete [[Integer (Datentyp)|Ganzzahlen]] (ca. 140 Funktionen),&lt;br /&gt;
* Arithmetische Funktionen für [[Rationale Zahl|rationale Zahlen]] (ca. 35 Funktionen),&lt;br /&gt;
* Arithmetische Funktionen für [[Gleitkommazahl]]en (ca. 65 Funktionen),&lt;br /&gt;
* [[C++]] [[Hüllenklasse|Wrapper-Klassen]] für obige Funktionen,&lt;br /&gt;
* Arithmetische Funktionen für vorzeichenlose Ganzzahlen, für die der Benutzer die Speicherverwaltung selbst implementieren muss,&lt;br /&gt;
* Funktionen zum Runden von Gleitkommazahlen und&lt;br /&gt;
* Funktionen für Kompatibilität zum {{nowrap|Berkeley MP Projekt}}.&lt;br /&gt;
&lt;br /&gt;
== Beispiel zur Verwendung ==&lt;br /&gt;
Die GMP besitzt drei Hauptdatentypen: &amp;lt;code&amp;gt;mpz_t&amp;lt;/code&amp;gt; für beliebig große [[Integer (Datentyp)|Integer]], &amp;lt;code&amp;gt;mpf_t&amp;lt;/code&amp;gt; für beliebig große [[Gleitkommazahl]]en mit änderbarer, auch extrem großer Präzision und &amp;lt;code&amp;gt;mpq_t&amp;lt;/code&amp;gt; für die Darstellung von Zahlen als [[Bruchrechnung|Bruch]]. Den GMP-Variablen können nicht einfach Werte zugewiesen werden wie bei normalen Datentypen, sondern es müssen spezielle Funktionen aufgerufen werden (siehe Listing). Der folgende C99-Quelltext veranschaulicht den grundlegenden Gebrauch der GMP:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; style=&amp;quot;font-size:85%; max-width:850px&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;gmp.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main (void)&lt;br /&gt;
{&lt;br /&gt;
    mpz_t a;        // deklariere GMP-Ganzzahlvariable&lt;br /&gt;
    mpf_t b;        // deklariere GMP-Gleitkommavariable&lt;br /&gt;
    mpq_t c;        // deklariere GMP-Bruchvariable&lt;br /&gt;
&lt;br /&gt;
    mpz_init(a);    // initialisiere GMP-Ganzzahlvariable&lt;br /&gt;
    mpf_init(b);    // initialisiere GMP-Gleitkommavariable&lt;br /&gt;
    mpq_init(c);    // initialisiere GMP-Bruchvariable&lt;br /&gt;
&lt;br /&gt;
    mpz_set_ui (a, 1337);             // setze GMP-Ganzzahlvariable auf einen unsigned-integer-Wert&lt;br /&gt;
    mpz_set_str(a, &amp;quot;4242424242&amp;quot;, 10); // andere Möglichkeit, eine MPZ-Variable zu setzen, falls der&lt;br /&gt;
                                      // Wertebereich von unsigned int nicht ausreicht. 10 ist die Basis.&lt;br /&gt;
&lt;br /&gt;
    mpf_set_d  (b, 3.14159265358);    // GMP-Gleitkommavariable auf einen double-Wert setzen&lt;br /&gt;
    mpf_set_str(b,&amp;quot;3.141592653589793238462643383279502&amp;quot;, 10); // Wie mpz_set_str();&lt;br /&gt;
&lt;br /&gt;
    mpq_set_ui (c, 23423, 11123);   // Setze c auf den Wert des Bruchs (23423/11123)&lt;br /&gt;
    mpq_canonicalize(c);            // Muss durchgeführt werden, um gemeinsame Teiler zu entfernen&lt;br /&gt;
                                    // und die Vorzeichen zu berichtigen&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtige Funktionen der GMP sind unter anderem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; style=&amp;quot;font-size:85%; max-width:850px&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;gmp.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main (void)&lt;br /&gt;
{&lt;br /&gt;
    // Die vorher deklarierten Variablen seien geltend&lt;br /&gt;
    // Weitestgehend identische Funktionen sind auch für mpf und mpq verfügbar (einfach Präfix austauschen)&lt;br /&gt;
    mpz_t   d, e;&lt;br /&gt;
    mpz_init_set_str (d, &amp;quot;133742&amp;quot;, 10); // kombinierte Initialisierungs- und Zuweisungsfunktion&lt;br /&gt;
    mpz_init   (e);&lt;br /&gt;
&lt;br /&gt;
    mpz_add   (e, a, d);           // c = a * d&lt;br /&gt;
    gmp_printf(&amp;quot;e = %Zd\n&amp;quot;, e);    // gmp_printf() ist äquivalent zu printf(), gibt aber GMP-Variablen aus&lt;br /&gt;
&lt;br /&gt;
    mpz_mul   (a, e, d);           // a = e * d&lt;br /&gt;
    mpz_add_ui(d, a, 421337);      // d = a + der unsigned-long-int-Wert 421337&lt;br /&gt;
    gmp_printf(&amp;quot;d = %Zd\n&amp;quot;,d);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder komfortabler in C++ durch den C++-Wrapper:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; style=&amp;quot;font-size:85%; max-width:850px&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;gmpxx.h&amp;gt;   // C++-Wrapper für GMP&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main ()&lt;br /&gt;
{&lt;br /&gt;
    mpz_class d(&amp;quot;133742&amp;quot;);&lt;br /&gt;
    mpz_class e;                   // initialisiert sich selbst mit 0&lt;br /&gt;
    e = a + d;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; e &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;        // gmpxx bietet operator&amp;lt;&amp;lt; für mpz_class&lt;br /&gt;
    a = e * d;&lt;br /&gt;
    d = a + 421337UL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;d = &amp;quot; &amp;lt;&amp;lt; d &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [https://gmplib.org/ Offizielle GMP Website] inklusive Dokumentation in HTML und PDF&lt;br /&gt;
* [https://www.gnu.org/ Offizielle Website des GNU-Projekts]&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Normdaten|TYP=s|GND=7859121-1}}&lt;br /&gt;
&lt;br /&gt;
{{SORTIERUNG:Gnu Multiple Precision Arithmetic Library}}&lt;br /&gt;
[[Kategorie:C-Bibliothek]]&lt;br /&gt;
[[Kategorie:Computerarithmetik]]&lt;br /&gt;
[[Kategorie:GNU-Paket]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Aka</name></author>
	</entry>
</feed>