隨機數學習整理

2021-07-31 13:56:27 字數 1105 閱讀 2808

rand()函式:

rand()的內部實現用的是線性同餘法,它不是真的隨機數,因其週期特別長,故在一定的範圍內可以看成是隨機的。

這種偽隨機數是由小m多項式序列生成的,其中產生每個小序列都有乙個初始值,即隨機種子。(注意:小m多項式序列的週期是65535,即每次利用乙個隨機種子生成的隨機數的週期是65535,當你取得65535個隨機數後它們又重複出現了。)

目前,計算機中用來產生隨機數的演算法基本上都是「線性同餘」法。rand()返回一隨機數值的範圍在0至rand_max之間,其中rand_max的範圍是32767到2147483647之間(int型)。

0~rand_max每個數字被選中的機率是相同的。

使用者未設定隨機數種子時,系統預設的隨機數種子為

rand()產生的是偽隨機數,它每次執行時基於的為隨機數序列是相同的,若要讓這個偽隨機數列不同的話,就需要用隨機數發生函式srand()初始化它,即對隨機數種子進行「播種」。

首先呼叫一次srand函式初始化隨機數種子。**如下:

srand((unsigned)time(null));
然後呼叫rand函式生成隨機數。

1.產生乙個範圍內的隨機數:

要取得[a,b)的隨機數

a + (int)(b-a)*rand()/(rand_max + 1);

要取得[a,b]的隨機數

a + (int)(b-a)*rand()/(rand_max);

要取得[0,1]之間的浮點數

rand()/double(rand_max);

2.篩選型隨機數

如希望取得0~99的隨機數,但不能是6或是5的倍數

int x = (int)(100 * rand()/(rand_max + 1.0));

while((x == 6) || (x % 5 == 0))

3.從一組亂數中取隨機數

可以用陣列將這些數儲存,然後生成乙個0~size-1範圍內的隨機數,以其對陣列做下標運算即可實現隨機取數。

隨機數 偽隨機數

隨機數 偽隨機數 rand函式在產生隨機數前,需要系統提供的生成偽隨機數序列的種子,rand根據這個種子的值產生一系列隨機數。如果系統提供的種子沒有變化,每次呼叫rand函式生成的偽隨機數序列都是一樣的。srand unsigned seed 通過引數seed改變系統提供的種子值,從而可以使得每次呼...

隨機數生成 偽隨機數和真隨機數

c語言隨機數的生成,很隨機,又不隨機,比如像下面的程式 c語言生成隨機數的函式在stdlib.h庫中 include includeint main return 0 上面的 經過執行生成了 41 18467 6334 26500但是無論執行多好遍結果都是一樣的,隨機數並不隨機。這是因為rand 函...

隨機數 科普 真隨機數和偽隨機數

位元幣使用者很喜歡討論 非對稱加密 橢圓曲線 量子計算機 這類高深莫測的話題,然後再以一種非常莫名其妙的方式把幣弄丟,比如說 隨機 隨機很重要,對於位元幣這種密碼學電子貨幣來說,尤其重要。可惜社群內對於隨機的討論並不多,導致很多人缺乏正確的認識,因此,我們今天就和大家聊聊隨機。說到隨機,有兩個必須要...