PHP devuelve el mayor valor aleatorio posible 32767 en Windows?getrandmax() ¿por qué 32767 limitación en windows?
¿Qué es la restricción en Windows?
echo getrandmax(); //32767
PHP devuelve el mayor valor aleatorio posible 32767 en Windows?getrandmax() ¿por qué 32767 limitación en windows?
¿Qué es la restricción en Windows?
echo getrandmax(); //32767
Según la fuente de código PHP, getrandmax()
se define como:
PHP_FUNCTION(getrandmax)
{
if (zend_parse_parameters_none() == FAILURE) {
return;
}
RETURN_LONG(PHP_RAND_MAX);
}
Y PHP_RAND_MAX
se define como:
#define PHP_RAND_MAX RAND_MAX
RAND_MAX
sí se define como:
/* System Rand functions */
#ifndef RAND_MAX
#define RAND_MAX (1<<15)
#endif
Por lo tanto, si hay un RAND_MAX
definido, se utiliza ...
... Y, en Windows con Visual Studio, en efecto, hay un RAND_MAX
definido (citando):
La constante
RAND_MAX
es el valor máximo que puede ser devuelto por la funciónrand
.RAND_MAX
se define como el valor0x7fff
.
Así que, básicamente, getrandmax()
vuelve 32767
porque así es como se define en Windows - y PHP menudo utiliza lo que las exportaciones subyacentes del sistema.
me ganó por tiempo. Solo estaba mirando la fuente –
rand llama a una función de rand del sistema que se remonta al arca, o al menos cuando la mayoría de los miniordenadores tenían una longitud de palabra de 16 bits. Si quieres un generador de números aleatorios mejor usa el Mersenne Twister uno: mt_rand(). Es mt_getrandmax() es 2^31-1. – TerryE
O más bien, es la semilla más grande posible. Solo hay 32767 valores aleatorios distintos entre 1 y 250000, o 1 y 1 mil millones, lo cual es bastante estúpido. (¡Aquí es donde entra el Mersenne Twister!) – Westie