2012-02-12 18 views
6

PHP, pencereler üzerinde mümkün olan en büyük rasgele değeri 32767 döndürüyor?getrandmax() Windows üzerinde 32767 limiti neden?

Pencerelerde kısıtlama nedir?

echo getrandmax(); //32767 
+2

rand, ark - ya da en azından mini bilgisayarların 16 bitlik bir sözcük uzunluğuna sahip olduğu bir sistem rand işlevini çağırır. Daha iyi bir rasgele sayı üretecini istiyorsanız, Mersenne Twister one'ı kullanın: mt_rand(). Mt_getrandmax() 2^31-1'dir. – TerryE

+1

Ya da en büyük olası tohum. 1 ile 250000 arasında ya da 1 ile 1 milyar arasında sadece 32767 farklı rasgele değer vardır, bu da oldukça aptaldır. (Mersenne Twister'in içeri girdiği yer!) – Westie

cevap

9

PHP kaynak koduna göre, getrandmax() gibi tanımlanır:

PHP_FUNCTION(getrandmax) 
{ 
    if (zend_parse_parameters_none() == FAILURE) { 
     return; 
    } 

    RETURN_LONG(PHP_RAND_MAX); 
} 

ve PHP_RAND_MAX olarak tanımlanır:

/* System Rand functions */ 
#ifndef RAND_MAX 
#define RAND_MAX (1<<15) 
#endif 
:

#define PHP_RAND_MAX RAND_MAX 

RAND_MAX kendisi olarak tanımlanır tanımlanmış bir RAND_MAX varsa Yani, kullanıldığı

...


... Ve Visual Studio ile Windows üzerinde gerçekten bir RAND_MAX tanımlanan (alıntı) vardır:

RAND_MAX sabiti rand işleviyle tarafından döndürülen maksimum değerdir. RAND_MAX, 0x7fff değeri olarak tanımlanır.

Yani öncelikle getrandmax() döner 32767 o Windows üzerinde tanımlı böyle yürüyor çünkü - ve PHP genellikle neyi yatan sistem ihracatını kullanır.

+0

zamanla beni yendi. Sadece kaynağa bakıyordum –

İlgili konular