2012-02-12 5 views
6

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

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

+1

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

risposta

9

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 funzione rand. RAND_MAX è definito come il valore 0x7fff.

Quindi, in sostanza, getrandmax() rendimenti 32767 perché è come è definito in Windows - e PHP usa spesso ciò che le esportazioni sistema sottostante.

+0

mi ha battuto per tempo. Stavo solo guardando la fonte –

Problemi correlati