首先rand()取得的隨機數是在一定的范圍內的,一般是0x7fff,即32767
那么要利用此函數取比此大的隨機數該怎么辦,我覺得只有一個辦法,就是拼接
通常我們會犯這樣的錯誤:即rand()*rand()這樣感覺是不是取到了一個更大的隨機數,因為隨機乘以隨機還是隨機嘛,但實際上是錯誤的
你可以把rand()函數當做一個重復的全排列,假設現在有6個數字(取得的概率是相同的)
rand1() :1 2 3 4 5 6
rand2() :1 2 3 4 5 6
那么現在看看結果與其取得的概率(僅舉兩例)
rand1()*rand2() P
2=1*2,2*1 1/6 * 1/6+1/6 * 1/6=2/36
12=3*4,4*3,2*6,6*2 1/6 * 1/6+1/6 * 1/6+1/6 * 1/6+1/6 * 1/6=4/36
可以由此看出這樣取是不可取的,因為獲取的數字概率是不相同的,這肯定就不滿足隨機的概念(即每個數字被選取到的概率應該相同)。
但是拼接是可取的
比如2和12
我們可以想象成兩個空位(分別代表rand1與rand2)
___ ___
每個空位有如下選擇
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
那么 2就是0 2 所以P(x=2)=1/10*1/10=1/100
那么12就是1 2 所以P(x=12)=1/10*1/10=1/100
毫無疑問,拼接是沒有任何問題的