PHP restituisce il maggior valore casuale possibile 32767 su Windows?getrandmax() perché il limite 32767 su Windows?
Che cos'è un vincolo su Windows?
echo getrandmax(); //32767
PHP restituisce il maggior valore casuale possibile 32767 su Windows?getrandmax() perché il limite 32767 su Windows?
Che cos'è un vincolo su Windows?
echo getrandmax(); //32767
Secondo il codice sorgente PHP, getrandmax()
è definito come:
PHP_FUNCTION(getrandmax)
{
if (zend_parse_parameters_none() == FAILURE) {
return;
}
RETURN_LONG(PHP_RAND_MAX);
}
E PHP_RAND_MAX
è definito come:
#define PHP_RAND_MAX RAND_MAX
RAND_MAX
stessa essendo definita come:
/* System Rand functions */
#ifndef RAND_MAX
#define RAND_MAX (1<<15)
#endif
Quindi, se c'è un RAND_MAX
definita, è usato ...
... E, su Windows con Visual Studio, v'è infatti una RAND_MAX
definito (citando):
La costante
RAND_MAX
è il valore massimo che può essere restituito da la funzionerand
.RAND_MAX
è definito come il valore0x7fff
.
Quindi, in sostanza, getrandmax()
rendimenti 32767
perché è come è definito in Windows - e PHP usa spesso ciò che le esportazioni sistema sottostante.
mi ha battuto per tempo. Stavo solo guardando la fonte –
rand chiama una funzione di system rand che risale all'arca, o almeno quando la maggior parte dei minicomputer aveva un wordlength a 16 bit. Se vuoi un generatore di numeri casuali migliore usa il Mersenne Twister uno: mt_rand(). È mt_getrandmax() è 2^31-1. – TerryE
O meglio, è il seme più grande possibile. Ci sono solo 32767 valori casuali distinti tra 1 e 250000, o 1 e 1 miliardo, che è piuttosto stupido. (È qui che entra in gioco il Mersenne Twister!) – Westie