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.

http://php.net/manual/en/language.types .integer.php

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';
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top