Start · Sprachen · PHP · Referenz · gmp_neg

gmp_neg

Funktion

Gibt den negierten Wert einer GMP-Zahl zurück (Vorzeichenumkehr).

seit PHP 4.0.4 Kategorie: math

Signatur

gmp_neg(GMP|int|string $num): GMP

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

Typ
GMP
Beschreibung
Gibt ein neues GMP-Objekt zurück, das den negierten Wert der Eingabe enthält. Für 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);
-42 100 -123456789012345678901234567890

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);
87654321098765432109

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