Y at-il quelque chose qui est plus grand que tous les chiffres en PHP?
-
19-09-2019 - |
Question
Je dois simuler un ∞ en PHP.
Alors que min(∞,$number)
est toujours $number
.
Pas de solution correcte
Autres conseils
Je suppose que, pour les entiers, vous pouvez utiliser PHP_INT_MAX
, le code suivant:
var_dump(PHP_INT_MAX);
donne cette sortie, sur ma machine:
int 2147483647
Mais vous devez être prudent; voir dépassement d'entier ( citant) :
Si PHP rencontre un certain nombre au-delà de la limites du type entier, il sera être interprété comme un flotteur à la place. En outre, une opération qui se traduit par un nombre au-delà des limites de la type entier retournera un flotteur à la place.
Et, à partir du flottant page de documentation de numéros de points:
La taille d'un flotteur est dépendant de la plate-forme, mais au maximum de ~ 1.8e308 avec une précision de environ 14 chiffres décimaux est une commune La valeur (le format IEEE 64 bits).
Compte tenu du dépassement d'entier, et en fonction de votre cas, en utilisant ce type de valeur pourrait être une meilleure solution (?) ...
Utilisez la PHP_INT_MAX
constante.
Vous pouvez éventuellement utiliser la constante PHP_INT_MAX
(cliquer pour docs manuel PHP) .
Cependant, vous voudrez peut-être penser à si vous avez vraiment besoin pour l'utiliser -. Il semble un peu d'une étrange requête
PHP a en fait une constante prédéfinie pour "l'infini": INF
. Ce n'est pas true l'infini, mais est essentiellement la plus grande valeur flottante possible. le plus grand flotteur est à peu près égale sur les systèmes 64 bits, à 1.8e308
, donc cela est considéré comme égal à l'infini.
$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)
Note, un nombre quelconque d'une valeur supérieure à la valeur flottante maximale sera jeté à INF
. Ainsi donc, si nous le faisons, var_dump($inf === 1e50000);
, ce sera aussi la sortie true
même si le flotteur maximum est inférieur à cela.
Je suppose que, en supposant que cela est un entier, vous pouvez utiliser constante PHP_INT_MAX.
min ($ number, $ number + 1) ??
En Perl, vous pouvez utiliser
$INF = 9**9E9;
qui est plus grande que toute valeur que vous pouvez stocker dans des nombres à virgule flottante IEEE. Et cela fonctionne vraiment comme prévu: un nombre non-infini sera plus petite que $INF
:
$N < $INF
est vrai pour un certain nombre "normal" $N
.
Peut-être que vous l'utilisez en PHP aussi?
min($number,$number)
est toujours $number
(également vrai pour max()
bien sûr).
Si votre seule préoccupation est fonction de comparaison alors oui, vous pouvez utiliser le tableau (), il sera toujours plus grand que tout nombre
comme
echo min(array(), 9999999999999999);
ou
if (array() > 9999999999999999) {
echo 'array won';
} else {
echo 'number won';
}