Start · Sprachen · PHP · Referenz · gmp_mul

gmp_mul

Funktion

Multipliziert zwei beliebig große Ganzzahlen (GMP-Zahlen) miteinander und gibt das Produkt als GMP-Objekt zurück.

seit PHP 4.0.4 Kategorie: math

Signatur

gmp_mul(GMP|int|string $num1, GMP|int|string $num2): GMP

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

Typ
GMP
Beschreibung
Gibt ein GMP-Objekt zurück, das das Produkt von 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);
1219326311370217952237463801111263526900

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
-42 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;
20! = 2432902008176640000

// 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.