2010-11-13 43 views
1

我想通過使用lcg_value()來產生自然數(0和x之間的正整數)。這是我可以從實際的源代碼查看功能:生成PHP的lcg_value()的自然數?

/* 
* combinedLCG() returns a pseudo random number in the range of (0, 1). 
* The function combines two CGs with periods of 
* 2^31 - 85 and 2^31 - 249. The period of this function 
* is equal to the product of both primes. 
*/ 

現在,我怎麼會變成花車爲自然數,這樣我就不會丟失信息/熵。目前我只是這樣做:

$number = pow(2,31) * lcg_value(); 

但是,我有一種感覺,我的直覺是它不完美。 2^62怎麼樣?或者也許2^31-334?或2^62-334?我不知道。

+1

爲什麼鴻溝,不乘? – kennytm 2010-11-13 18:20:30

+0

對不起,這是一個錯字。 :) – Tower 2010-11-13 18:21:38

+0

334如何適用於這種情況? – poke 2010-11-13 18:51:48

回答

1

任一類型的浮動或INT由平臺界定

整數的整數的大小是依賴於平臺的,雖然約兩十億的最大值是通常的值(這是32位籤)。 64位平臺的最大值通常約爲9E18。 PHP不支持無符號整數。整數大小可以使用常量PHP_INT_SIZE確定,最大值使用自PHP 4.4.0和PHP 5.0.5以來的常量PHP_INT_MAX。

float float的大小是平臺相關的,雖然最大值約爲1.8e308,精度約爲14位十進制數是一個常用值(64位IEEE格式)。

保持浮動的最高精度,U可以參考http://www.php.net/manual/en/function.bcmul.php