隨機數種子

2022-09-02 05:24:09 字數 2027 閱讀 7152

**隨機數:

int main()

函式rand()是真正的隨機數生成器,而srand()會設定供rand()使用的隨機數種子。

如果你在第一次呼叫rand()之前沒有呼叫srand(),那麼系統會為你自動呼叫srand()。

而使用同種子相同的數呼叫 srand()會導致相同的隨機數序列被生成。

srand((unsigned)time(null))

則使用系統定時/計數器的值做為隨機種子。每個種子對應一組根據演算法預先生成的隨機數,所以,在相同的平台環境下,不同時間產生的隨機數會是不同的,

相應的,若將srand(unsigned)time(null)改為srand(tp)(tp為任一常量),則無論何時執行、執行多少次得到的「隨機數」都會是一組固定的序列,因此srand生成的隨機數是偽隨機數。

庫函式中系統提供了兩個函式用於產生隨機數:srand()和rand()。 

原型為:

1.:int rand(void):

從srand (seed)中指定的seed開始,返回乙個[0, rand_max(0x7fff)]間的隨機整數。

2.:void srand(unsigned seed):

引數seed是rand()的種子,用來初始化rand()的起始值。

但是,要注意的是所謂的「偽隨機數」指的並不是假的隨機數。

其實絕對的隨機數只是一種理想狀態的隨機數,計算機只能生成相對的隨機數即偽隨機數。

計算機生 成的偽隨機數既是隨機的又是有規律的 —— 一部份遵守一定的規律,一部份則不遵守任何規律。

比如「世上沒有兩片形狀完全相同的樹葉」,這正點到了事物的特性 —— 差異性;

但是每種樹的葉子都有近似的形狀,這正是事物的共性 —— 規律性。

從這個角度講,我們就可以接受這樣的事實了:計算機只能產生偽隨機數而不是絕對的隨機數。

系統在呼叫rand()之前都會自動呼叫srand(),如果使用者在rand()之前曾呼叫過srand()給引數seed指定了乙個值,那麼 rand()就會將seed的值作為產生偽隨機數的初始值;

而如果使用者在rand()前沒有呼叫過srand(),那麼系統預設將1作為偽隨機數的初始 值。

如果給了乙個定值,那麼每次rand()產生的隨機數序列都是一樣的~~

所以為了避免上述情況的發生我們通常用srand((unsigned)time(0))或者srand((unsigned)time(null))來 產生種子。

如果仍然覺得時間間隔太小,可以在(unsigned)time(0)或者(unsigned)time(null)後面乘上某個合適的整數。 

例如    srand((unsigned)time(null)*10)

另外,關於time_t time(0):time_t被定義為長整型,它返回從2023年1月1日零時零分零秒到目前為止所經過的時間,單位為秒。

生成隨機數函式rand用法,如**所示:

**如下:

#include "stdafx.h"

#include #include int main()

unsigned start = (rand() * 1000) / rand_max + 15550; // 生成15550~16549之間的隨機數

printf("start = %d \n", start);

start &= ~1; // 把start變為偶數,如果是奇數,則start變為start - 1的偶數

printf("start = %d \n", start);

getchar();

return 0;

}

執行結果如下所示:

j = 9

j = 6

j = 7

j = 8

j = 1

j = 5

j = 3

j = 1

j = 10

j = 9

start = 16185

start = 16184

隨機數種子

隨機數 int main 函式rand 是真正的隨機數生成器,而srand 會設定供rand 使用的隨機數種子。如果你在第一次呼叫rand 之前沒有呼叫srand 那麼系統會為你自動呼叫srand 而使用同種子相同的數呼叫 srand 會導致相同的隨機數序列被生成。srand unsigned ti...

隨機數種子

隨機數就是就隨機數種子中取出的數。種子就是個序號,這個序號交給乙個數列管理器,通過這個序號,你從管理器中取出乙個數列,這個數列就是你通過那個序號得到的隨機數。但這個隨技術並不真正隨機。因為它是通過某個演算法的得到。也就是說你給數列管理器同乙個序號將得到同樣乙個 隨機 數列。也就是說種子和隨機數列是一...

隨機數種子與隨機數

本文要討論的內容就是,在c語言中,是如何取得這個隨機數的?乙個語句 rand 它的作用就是隨機取0到rand max之間的任何數。標準指出,rand max值的範圍到少是32767,也就是雙位元組整數的最大值。下面我們用乙個例子來取得從1到6的隨機整數 include include main 第2...