C語言取大隨機數的問題


首先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

毫無疑問,拼接是沒有任何問題的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM