C'è qualcosa che è più grande di qualsiasi numero in PHP?
-
19-09-2019 - |
Domanda
Devo simulare un ∞ in PHP.
Affinché min(∞,$number)
è sempre $number
.
Nessuna soluzione corretta
Altri suggerimenti
Suppongo che, per gli interi, è possibile utilizzare PHP_INT_MAX
, il seguente codice:
var_dump(PHP_INT_MAX);
dà questa uscita, sulla mia macchina:
int 2147483647
Ma devi stare attento ; vedi integer overflow ( citando) :
Se il PHP incontra un numero al di là del limiti di tipo intero, sarà essere interpretato come un pescante, invece. Inoltre, operazione che si traduce in un numero oltre i limiti della tipo intero restituirà un galleggiante invece.
E, dal numeri in virgola pagina di documentazione di galleggiamento:
La dimensione di un galleggiante è dipendente dalla piattaforma, anche se un massimo di ~ 1.8e308 con una precisione di circa 14 cifre decimali è un comune il valore (l'64 bit in formato IEEE).
In considerazione della integer overflow, ea seconda del vostro caso, l'utilizzo di questo tipo di valore potrebbe essere una soluzione migliore (?) ...
Utilizzare la PHP_INT_MAX
costante.
Potresti potenzialmente utilizzare il file PHP_INT_MAX
costante (fare clic per i documenti manuali PHP).
Tuttavia, potresti voler pensare se davvero Bisogno per usarlo - sembra una richiesta un po' strana.
PHP ha in realtà una costante predefinita per "infinito": INF
. Questo non è true l'infinito, ma è essenzialmente il più grande valore float possibile. Nei sistemi a 64 bit, il più grande galleggiante è circa pari a 1.8e308
, quindi questo è considerato uguale a infinito.
$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)
Nota, qualsiasi numero con un valore maggiore del valore massimo del galleggiante sarà gettato a INF
. Così dunque se lo facciamo, var_dump($inf === 1e50000);
, questo sarà anche l'uscita true
anche se il galleggiante massima è inferiore a questo.
suppongo, supponendo che questo è un numero intero, è possibile utilizzare PHP_INT_MAX costante.
min (numero $, $ il numero + 1) ??
In Perl è possibile utilizzare
$INF = 9**9E9;
, che è più grande di qualsiasi valore è possibile memorizzare i numeri in virgola mobile IEEE. E che in realtà funziona come previsto: qualsiasi numero non infinito sarà più piccolo $INF
:
$N < $INF
vale per qualsiasi "normale" numero $N
.
Forse lo si utilizza in PHP troppo?
min($number,$number)
è sempre $number
(anche per max()
ovviamente).
Se la vostra unica preoccupazione è funzione di confronto allora sì, è possibile utilizzare array (), sarà sempre più grande allora un qualsiasi numero
come
echo min(array(), 9999999999999999);
o
if (array() > 9999999999999999) {
echo 'array won';
} else {
echo 'number won';
}