我有一個叫myrand()
的函數,它可以產生從1到5的隨機數。我想用另一個函數myrand()
來產生1到7的隨機數。我寫了類似的東西。解決隨機數邏輯
function newrand() {
return myrand()+2;
}
上面的邏輯是不是我希望它永遠不會返回我1或2。我不希望使用任何if條件所以我應該怎麼做才能讓邏輯隨機數。
我有一個叫myrand()
的函數,它可以產生從1到5的隨機數。我想用另一個函數myrand()
來產生1到7的隨機數。我寫了類似的東西。解決隨機數邏輯
function newrand() {
return myrand()+2;
}
上面的邏輯是不是我希望它永遠不會返回我1或2。我不希望使用任何if條件所以我應該怎麼做才能讓邏輯隨機數。
在PHP中有一個名爲rand()
的函數來執行此操作。試試下面的代碼:
function newrand() {
return rand(1, 7);
}
或者可以說,你的myrand()
是這樣的下面的代碼:
function myrand() { return rand(1,5); }
你可以做的是,通過UPPERLIMIT到myrand()
像myrand(5)
和myrand(7)
而不是myrand() + 2
。如下面:
myrand($max) {
return rand(1, $max);
}
,並調用它像這樣:
function newrand() {
return myrand(7);
}
當你寫某種rand()
功能,最好想想二進制數表示的不僅僅是常規的數字。
例如,要獲得範圍從0到7的隨機數,您必須得到3位的均等分佈。
000 # 0
001 # 1
010 # 2
...
111 # 7
如果可以考慮你myrand()
爲從1產生的數字至5以相等的概率,則可以通過組合由myrand()
呼叫產生第一個2位構造任何rand()
功能的功能。
func rand_bits_2() { return (myrand() - 1) & 0b11; }
func rand_bits_4() {
hi = rand_bits_2() << 2; // first 2 random bits
lo = rand_bits_2(); // consecutive 2 random bits
return hi | lo;
}
和4個隨機位從0到15的數字製作以這樣的想法,你還可以得到例如myrand7()
。
UPD:您可以找到更多here。
一個明亮而獨特的方法,但仍然有點**重人** SO聲譽小於70,並且仍在努力使用標準的PHP rand()函數,甚至可能對***低級別位操作***甚至沒有絲毫知識......但對那些熱衷於探索異常的遊客......或***非傳統***如果您願意**: - )** – Poiz
讓我們假設你的函數統一生成1
和5
之間的數字。均勻地產生1
和7
之間的數字做到以下幾點:
生成7
隨機數
X1 ...X7
1
和
5
之間
使用功能
計算樣品的總和
S = X1 + X2 + ... + x7
返回
(S - 7 MOD 7)+ 1
其中(s - 7 mod 7)
是通過7
s - 7
的整數除法的非負提醒。
這裏是我生成100000
樣品重複上述這樣的次數的3個步驟後剛剛獲得的隨機頻率的一個示例:
1 -> 14331
2 -> 14447
3 -> 14489
4 -> 14095
5 -> 14293
6 -> 14157
7 -> 14188
其中,因爲你可以看到,清楚地看起來均勻。
爲什麼你想再次使用'myrand'? 'mt_rand(1,7)'不會更容易嗎? – roberto06