Gibt es etwas, das in PHP größer als alle Zahlen ist?
-
19-09-2019 - |
Frage
Ich brauche einen ∞ in PHP zu simulieren.
Damit min(∞,$number)
ist immer $number
.
Keine korrekte Lösung
Andere Tipps
Ich nehme an, dass für ganze Zahlen sind, könnten Sie PHP_INT_MAX
, Mit dem folgenden Code:
var_dump(PHP_INT_MAX);
Gibt diesen Ausgang, auf meinem Rechner:
int 2147483647
Aber man muss vorsichtig sein; finden Sie unter Integer Überlauf ( zitiert) :
Begegnungen Wenn PHP eine Reihe über die Grenzen des Integer-Typ, wird es anstatt als float interpretiert werden. Auch eine Operation, die in einem Ergebnis Zahl jenseits der Grenzen der Integer-Typ wird wieder einen Schwimmer statt.
Und von der Gleitkommazahlen Dokumentationsseite:
Die Größe eines Schwimmers plattformabhängig, obwohl höchstens von ~ 1.8e308 mit einer Genauigkeit von etwa 14 Dezimalziffern ist eine gemeinsame Wert (die 64-Bit-IEEE-Format).
In Anbetracht der Integer-Überlauf, und je nach Fall diese Art von Wert verwenden könnte sein, eine bessere (?) Lösung ...
Verwenden Sie die Konstante PHP_INT_MAX
.
Sie könnten möglicherweise die PHP_INT_MAX
Konstante verwenden (klicken für PHP-Handbuch docs) .
Sie können jedoch darüber nachdenken, ob Sie wirklich Notwendigkeit , es zu benutzen -. Es scheint wie eine etwas seltsame Anfrage
PHP hat tatsächlich eine vordefinierte Konstante für „unendlich“: INF
. Dies ist nicht true Unendlichkeit, sondern ist im Wesentlichen der größte Schwimmer Wert möglich. Auf 64-Bit-Systemen der größte Schwimmer ist ungefähr gleich zu 1.8e308
, so dass diese bis ins Unendliche zu sein als gleich betrachtet wird.
$inf = INF;
var_dump(min($inf,PHP_INT_MAX)); // outputs int(9223372036854775807)
var_dump(min($inf,1.79e308)); // outputs float(1.79E+308)
var_dump(min($inf,1.799e308)); // outputs float(INF)
var_dump(min($inf,1.8e308)); // outputs float(INF)
var_dump($inf === 1.8e308); // outputs bool(true)
Beachten Sie, jede Zahl mit einem Wert, der größer ist als der maximale Float-Wert wird auf INF
gegossen werden. So also, wenn wir das tun, var_dump($inf === 1e50000);
, dies wird auch ausgegeben true
obwohl der maximale Schwimmer ist weniger als das.
Ich nehme an, vorausgesetzt, dies ist eine ganze Zahl, könnte man PHP_INT_MAX Konstante verwenden.
min ($ number, $ number + 1) ??
In Perl können Sie
$INF = 9**9E9;
, die größer ist als jeder Wert, den Sie in IEEE Gleitkommazahlen speichern können. Und das wirklich funktioniert wie beabsichtigt: jede nicht-unendliche Anzahl kleiner sein wird als $INF
:
$N < $INF
gilt für jede "normale" Zahl $N
.
Vielleicht verwenden Sie es in PHP zu?
min($number,$number)
ist immer $number
(gilt auch für max()
natürlich).
Wenn Ihre einzige Sorge Vergleichsfunktion ist dann ja, können Sie array (), es wird immer größer sein, dann eine beliebige Zahl
wie
echo min(array(), 9999999999999999);
oder
if (array() > 9999999999999999) {
echo 'array won';
} else {
echo 'number won';
}