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
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
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
sabitirand
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.
zamanla beni yendi. Sadece kaynağa bakıyordum –
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
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