2014-11-22 114 views
4

我在想,在PHP中,你可以使用這樣的事情:PHP隨機概率

rand(1, 100); 

生成1到100之間的數字。如果我使用此代碼來獲得一個隨機數與4十進制數字:

rand(1 * 10000, 100 * 10000)/10000; 

這會使獲得更高/更低數字的概率和等同性有所不同嗎?

+0

'rand'是得到一個隨機數,反正最壞的一種方式更好/更快的隨機數,所以... – 2014-11-22 23:46:45

+0

號' rand()只是給出了兩個範圍之間的僞隨機數。首先乘以一個變量,然後除以相同的變量對於結果更高或更低不會產生任何影響。 – Fluffeh 2014-11-22 23:47:17

+0

http://www.random.org/randomness/ – DarkBee 2014-11-22 23:48:11

回答

2

這將工作(有一個警告),雖然我仍然會推薦使用mt_rand而不是rand。主要區別在於mt_rand使用不同的PRNG(僞隨機數生成器)引擎,通常提供的結果比rand具有更好的隨機性。即便如此,這種方法也存在一個問題,您可能認爲或可能不認爲嚴重。

潛在的問題來自浮點表示法。某些值不能用二進制浮點表示,因此它們不會在輸出中精確顯示。鑑於你正在產生的值範圍,精度的損失不應該是顯着的。如果事實證明對您來說實際問題是唯一的方法是定點算術或二進制編碼的小數。如有必要,我可以解釋他們的用途。

就這個概率而言(使用這種方法),使用這種方法,如果我們使用這種方法,那麼從[1,100]開始,在基數爲10的小數點後最多有4位數的每個數字將以相同的概率產生忽略近似誤差。當然,這是假定隨機數發生器實際上產生一個均勻分佈,這就是爲什麼我建議mt_rand

+0

我正在尋找4位數的十進制數,即:12.8472對不起,我感到困惑。 – Louis 2014-11-22 23:53:42

+0

@Louis我更新了一個我更滿意的狀態的答案。我希望它能清除一些東西。 – 2014-11-24 11:09:00