Signatur
Beschreibung
gmp_sub() berechnet die Differenz zweier Ganzzahlen (num1 - num2) unter Verwendung der GNU Multiple Precision Arithmetic Library (GMP). Da GMP intern mit beliebig großen Ganzzahlen arbeitet, sind keine Überläufe möglich – auch nicht bei Zahlen, die weit über den Bereich von PHP-nativen int-Werten hinausgehen.
Die Funktion akzeptiert als Argumente GMP-Objekte (wie sie z. B. von gmp_init() oder anderen GMP-Funktionen zurückgegeben werden), aber auch gewöhnliche PHP-Integer oder numerische Strings. So kann man direkt mit Zahlenliteralen arbeiten, ohne sie zuvor explizit konvertieren zu müssen.
Das Ergebnis ist immer ein GMP-Objekt. Um daraus eine menschenlesbare Zahl zu erhalten, kann man es an gmp_strval() oder gmp_intval() übergeben. Negative Ergebnisse werden korrekt dargestellt.
Typische Anwendungsfälle sind kryptographische Berechnungen, exakte Finanzarithmetik mit sehr großen Zahlen sowie wissenschaftliche Berechnungen, bei denen der Standard-Integer-Bereich von PHP nicht ausreicht.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $num1 Pflicht | GMP|int|string | Der Minuend – eine beliebig große Ganzzahl als GMP-Objekt, PHP-Integer oder numerischer String. |
|
| $num2 Pflicht | GMP|int|string | Der Subtrahend – eine beliebig große Ganzzahl als GMP-Objekt, PHP-Integer oder numerischer String. |
Rückgabewert
GMP-Objekt zurück, das die Differenz num1 - num2 enthält. Das Ergebnis kann positiv, null oder negativ sein.Beispiele
Einfache Subtraktion mit Integer-Argumenten
<?php
$result = gmp_sub(100, 42);
echo gmp_strval($result); // 58
// Auch negative Ergebnisse werden korrekt dargestellt
$result2 = gmp_sub(10, 50);
echo PHP_EOL . gmp_strval($result2); // -40
Subtraktion sehr großer Zahlen jenseits des PHP-Integer-Bereichs
<?php
// PHP_INT_MAX auf 64-Bit-Systemen: 9223372036854775807
$a = gmp_init('99999999999999999999999999999999');
$b = gmp_init('11111111111111111111111111111111');
$differenz = gmp_sub($a, $b);
echo gmp_strval($differenz);
Kombination mit anderen GMP-Funktionen in einer Berechnung
<?php
// Berechnung: (a * b) - (c + d) für sehr große Zahlen
$a = gmp_init('123456789012345678901234567890');
$b = gmp_init('2');
$c = gmp_init('100000000000000000000000000000');
$d = gmp_init('23456789012345678901234567890');
$produkt = gmp_mul($a, $b); // a * b
$summe = gmp_add($c, $d); // c + d
$ergebnis = gmp_sub($produkt, $summe); // (a*b) - (c+d)
echo gmp_strval($ergebnis);
// Wichtig · Fallstricke
Voraussetzung: Die GMP-Erweiterung muss in PHP aktiviert sein. Auf vielen Systemen ist sie standardmäßig vorhanden; andernfalls muss PHP mit dem Flag --with-gmp kompiliert oder das entsprechende Paket (z. B. php-gmp) installiert werden.
Ab PHP 5.6 können GMP-Objekte direkt mit den Standard-Arithmetik-Operatoren (+, -, * usw.) verwendet werden, was den Code lesbarer machen kann. gmp_sub() bleibt jedoch für ältere Codebases und explizite Klarheit im Einsatz.
Übergibt man einen nicht-numerischen String, wird ein TypeError (PHP 8) bzw. ein Warnung ausgelöst. Dezimalzahlen (Floats) werden nicht unterstützt – GMP arbeitet ausschließlich mit ganzzahligen Werten.