隨機數 秒及毫秒級隨機數種子(C )

2021-08-02 12:39:05 字數 2437 閱讀 2518

一、函式

1、rand

函式原型:int rand(void);

所在標頭檔案:stdlib.h

功能描述:rand()的內部實現是用線性同餘法做的,它不是真的隨機數,因其週期特別長,故在一定的範圍裡可看成是隨機的。rand()返回一隨機數值的範圍在0至rand_max 間。rand_max的範圍最少是在32767之間(int),用unsigned int 雙位元組是65535,四位元組是4294967295的整數範圍。0~rand_max每個數字被選中的機率是相同的。使用者未設定隨機數種子時,系統預設的隨機數種子為1。rand()產生的是偽隨機數字,每次執行時是相同的,若要不同,用函式srand()初始化它。

2、srand

函式原型:void srand(unsigned int seed);

所在標頭檔案:stdlib.h

功能描述:srand()用來設定rand()產生隨機數時的隨機數種子。引數seed必須是個整數,通常可以利用time(0)的返回值或null來當做seed。如果每次seed都設相同值,rand()所產生的隨機數值每次就會一樣。

3、time

函式原型:time_t time(time_t *t);

所在標頭檔案:time.h

**返回值:**成功則返回秒數,失敗則返回((time_t)-1)值,錯誤原因存於errno 中

功能描述:此函式會返回從公元 1970 年1 月1 日的utc 時間從0 時0 分0 秒算起到現在所經過的秒數。如果t 並非空指標的話,此函式也會將返回值存到t 指標所指的記憶體。

4、ftime

函式原型:int ftime(struct timeb *tp);

所在標頭檔案:sys/timeb.h

**返回值:**無論成功或失敗都返回0

功能描述:ftime()將目前日期由tp所指的結構返回。tp結構定義:

struct   timeb;
二、**例項:1、以秒為隨機數種子

unsigned int tseed = time(null);

srand(tseed);

unsigned int crand = rand();

2、以秒為隨機數種子產生一定範圍內的數值

unsigned int tseed = time(null);

srand(tseed);

// 生成[b,a]範圍內的數值,包括b和a

unsigned int range = a - b + 1;

unsigned int crand = rand() % range + b;

// 生成[b,a)範圍內的數值,包括b,不包括a

unsigned int range = a - b;

unsigned int crand = rand() % range + b;

3、以毫秒為隨機數種子

struct timeb timeseed;

ftime(×eed);

srand(timeseed.time * 1000 + timeseed.millitm); // milli time

unsigned int crand = rand();

4、以毫秒為隨機數種子產生一定範圍內的數值

struct timeb timeseed;

ftime(×eed);

srand(timeseed.time * 1000 + timeseed.millitm); // milli time

// 生成[b,a]範圍內的數值,包括b和a

unsigned int range = a - b + 1;

unsigned int crand = rand() % range + b;

// 生成[b,a)範圍內的數值,包括b,不包括a

unsigned int range = a - b;

unsigned int crand = rand() % range + b;

讀後有收穫可以支付寶請作者喝咖啡:

隨機數種子

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

隨機數種子

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

隨機數種子

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