Signatur
Beschreibung
gmp_neg() berechnet das arithmetische Negat einer beliebig großen ganzen Zahl, die als GMP-Objekt, Integer oder numerischer String übergeben wird. Das Ergebnis entspricht dem Wert -num: positive Zahlen werden negativ, negative Zahlen werden positiv.
Die Funktion ist Teil der GMP-Erweiterung (GNU Multiple Precision) und eignet sich für Berechnungen mit sehr großen ganzen Zahlen, die den Wertebereich von PHP-nativen int-Typen überschreiten. Da GMP-Objekte unveränderlich sind, wird ein neues GMP-Objekt zurückgegeben, das ursprüngliche Objekt bleibt unberührt.
Typisch wird gmp_neg() in kryptographischen Algorithmen, bei der Primzahlforschung oder in wissenschaftlichen Berechnungen eingesetzt, wo Vorzeichenoperationen auf großen Zahlen notwendig sind.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $num Pflicht | GMP|int|string | Die zu negierende Zahl. Kann ein GMP-Objekt, ein PHP-int oder ein numerischer String sein (auch mit optionalem Vorzeichen, z. B. "-42"). |
Rückgabewert
0 wird ebenfalls 0 zurückgegeben.Beispiele
Einfache Vorzeichenumkehr mit gmp_neg
<?php
$a = gmp_init(42);
$neg = gmp_neg($a);
echo gmp_strval($neg); // -42
$b = gmp_init(-100);
$pos = gmp_neg($b);
echo "\n" . gmp_strval($pos); // 100
// Auch direkt mit Integer oder String
$c = gmp_neg("123456789012345678901234567890");
echo "\n" . gmp_strval($c);
Vorzeichenwechsel bei Null
<?php
$zero = gmp_init(0);
$negZero = gmp_neg($zero);
echo gmp_strval($negZero); // 0 (Null bleibt Null)
gmp_neg in einer Differenzberechnung mit großen Zahlen
<?php
// Berechnet |a - b| ohne gmp_abs durch Fallunterscheidung
$a = gmp_init("99999999999999999999");
$b = gmp_init("12345678901234567890");
$diff = gmp_sub($a, $b);
if (gmp_cmp($diff, 0) < 0) {
$diff = gmp_neg($diff);
}
echo gmp_strval($diff);
// Wichtig · Fallstricke
GMP-Erweiterung erforderlich: Die GMP-Erweiterung muss in der PHP-Installation aktiviert sein (kompiliert mit --with-gmp). Andernfalls steht gmp_neg() nicht zur Verfügung.
Da GMP-Objekte seit PHP 5.6 als eigenständige Objekte und nicht mehr als Ressourcen behandelt werden, kann gmp_neg() nahtlos mit anderen GMP-Funktionen kombiniert werden, ohne explizite Typkonvertierungen zu benötigen.