Signatur
Beschreibung
gmp_mul() berechnet das Produkt zweier ganzer Zahlen unter Verwendung der GNU Multiple Precision Arithmetic Library (GMP). Die Funktion arbeitet mit beliebig großen Ganzzahlen, also weit über die Grenzen des nativen PHP-int-Typs hinaus, und ist damit ideal für kryptographische Berechnungen, große Fakultäten oder andere Anwendungen, bei denen gewöhnliche Integer-Arithmetik nicht ausreicht.
Die Parameter können als GMP-Objekt, als PHP-int oder als numerischer string übergeben werden. PHP konvertiert die Eingaben intern automatisch in GMP-Objekte. Das Ergebnis ist stets ein GMP-Objekt, das mit anderen GMP-Funktionen weiterverarbeitet oder mit gmp_strval() bzw. gmp_intval() in einen lesbaren Wert umgewandelt werden kann.
Negative Zahlen werden vollständig unterstützt: Das Vorzeichen des Ergebnisses folgt den üblichen mathematischen Regeln. Da GMP intern mit unbegrenzter Präzision arbeitet, treten keine Überläufe auf, wie sie bei nativen PHP-Integers auf 64-Bit-Systemen bei etwa 9,2 × 1018 auftreten würden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $num1 Pflicht | GMP|int|string | Der erste Faktor. Kann ein GMP-Objekt, ein PHP-Integer oder ein numerischer String sein. | |
| $num2 Pflicht | GMP|int|string | Der zweite Faktor. Kann ein GMP-Objekt, ein PHP-Integer oder ein numerischer String sein. |
Rückgabewert
num1 und num2 repräsentiert. Das Ergebnis kann direkt an andere GMP-Funktionen übergeben oder mit gmp_strval() als Dezimalstring ausgegeben werden.Beispiele
Einfache Multiplikation zweier GMP-Zahlen
<?php
$a = gmp_init('12345678901234567890');
$b = gmp_init('98765432109876543210');
$produkt = gmp_mul($a, $b);
echo gmp_strval($produkt);
Multiplikation mit negativen Zahlen und Strings als Eingabe
<?php
// Strings und negative Zahlen direkt übergeben
$result1 = gmp_mul('-7', '6');
echo gmp_strval($result1) . PHP_EOL; // -42
// Gemischter Einsatz: GMP-Objekt mit Integer
$big = gmp_init('1000000000000000000000');
$result2 = gmp_mul($big, 3);
echo gmp_strval($result2) . PHP_EOL; // 3000000000000000000000
Berechnung einer großen Fakultät mit gmp_mul
<?php
// 20! mit GMP berechnen
$fakultaet = gmp_init(1);
for ($i = 2; $i <= 20; $i++) {
$fakultaet = gmp_mul($fakultaet, $i);
}
echo '20! = ' . gmp_strval($fakultaet) . PHP_EOL;
// Wichtig · Fallstricke
Voraussetzung: Die GMP-Erweiterung muss in PHP aktiviert sein (Kompilierungsoption --with-gmp bzw. PHP-Extension ext/gmp). Ist sie nicht verfügbar, wirft PHP einen fatalen Fehler.
Ab PHP 5.6 werden GMP-Objekte zurückgegeben; in älteren Versionen waren es Ressourcen. Code, der Ressourcen erwartet, ist daher nicht mehr kompatibel.
Für sehr leistungskritische Schleifen kann es sinnvoll sein, die Konvertierung von Strings zu GMP-Objekten (gmp_init()) einmalig außerhalb der Schleife vorzunehmen, da die interne Konvertierung bei jedem Aufruf leicht Overhead verursacht.