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.

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

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';
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top