2012-02-12 20 views
6

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 
+2

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

+1

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

Respuesta

9

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ón rand. RAND_MAX se define como el valor 0x7fff.

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.

+0

me ganó por tiempo. Solo estaba mirando la fuente –

Cuestiones relacionadas