Start · Sprachen · PHP · Referenz · gmp_sign

gmp_sign

Funktion

Gibt das Vorzeichen einer GMP-Zahl zurück: <code>1</code> für positive, <code>-1</code> für negative Zahlen und <code>0</code> für null.

seit PHP 4.0.4 Kategorie: math

Signatur

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

Beschreibung

gmp_sign() ermittelt das Vorzeichen einer beliebig großen ganzen Zahl, die als GMP-Objekt, nativer PHP-Integer oder als Zeichenkette übergeben werden kann. Die Funktion ist Teil der GMP-Erweiterung (GNU Multiple Precision), die für Berechnungen mit sehr großen Ganzzahlen verwendet wird, die den Wertebereich normaler PHP-Integer überschreiten.

Der Rückgabewert ist genau einer von drei möglichen Werten: 1, wenn die Zahl positiv ist; -1, wenn sie negativ ist; und 0, wenn die Zahl gleich null ist. Dies entspricht der mathematischen Vorzeichenfunktion (Signum-Funktion).

Typische Anwendungsfälle sind die Überprüfung des Ergebnisses einer arithmetischen Operation (z. B. ob ein Differenzwert positiv oder negativ ist), sowie Fallunterscheidungen in Algorithmen, die mit großen Ganzzahlen arbeiten, wie etwa bei kryptografischen Berechnungen oder Primzahltests.

Die GMP-Erweiterung muss kompiliert oder als Shared Extension geladen sein (--with-gmp). Seit PHP 5.6 werden GMP-Zahlen als Objekte vom Typ GMP zurückgegeben; ältere Versionen nutzten Ressourcen.

Parameter

Name Typ Default Beschreibung
$num Pflicht GMP|int|string Die zu prüfende Zahl. Kann ein GMP-Objekt, ein PHP-Integer oder eine Zeichenkette mit einer ganzen Zahl (auch sehr großer) sein.

Rückgabewert

Typ
int
Beschreibung
Gibt 1 zurück, wenn num positiv ist, -1, wenn num negativ ist, und 0, wenn num gleich null ist.

Beispiele

Vorzeichen verschiedener Zahlen prüfen

<?php
$positiv = gmp_init('123456789012345678901234567890');
$negativ = gmp_init('-987654321');
$null    = gmp_init('0');

echo gmp_sign($positiv) . "\n"; // 1
echo gmp_sign($negativ) . "\n"; // -1
echo gmp_sign($null)    . "\n"; // 0
1 -1 0

Vorzeichen eines Rechenergebnisses auswerten

<?php
$a = gmp_init('500');
$b = gmp_init('750');
$differenz = gmp_sub($a, $b);

$vorzeichen = gmp_sign($differenz);

switch ($vorzeichen) {
    case 1:
        echo "a ist größer als b";
        break;
    case -1:
        echo "a ist kleiner als b";
        break;
    case 0:
        echo "a und b sind gleich";
        break;
}
a ist kleiner als b

Verwendung mit Integer und String direkt

<?php
// gmp_sign akzeptiert auch native PHP-Integer und Strings
echo gmp_sign(42)    . "\n"; // 1
echo gmp_sign(-7)    . "\n"; // -1
echo gmp_sign('0')   . "\n"; // 0
echo gmp_sign('-99') . "\n"; // -1
1 -1 0 -1

// Wichtig · Fallstricke

Die GMP-Erweiterung muss aktiviert sein. Unter Linux kann sie mit --with-gmp beim Kompilieren eingebunden oder als Paket (z. B. php-gmp) installiert werden. Unter Windows ist sie in den meisten offiziellen PHP-Distributionen als DLL enthalten und kann in der php.ini aktiviert werden (extension=gmp).

Bei der Übergabe von Zeichenketten werden nur gültige ganzzahlige Darstellungen akzeptiert. Ungültige Werte erzeugen einen Fehler. Seit PHP 8.0 ist der Typ-Hinweis für GMP-Parameter als GMP|int|string formal deklariert.