對C語言隨機數函式rand的一些理解

2022-07-01 21:21:08 字數 1167 閱讀 1307

int rand(void) : stdlib.h

返回[0,rand_max]範圍的整數,ansi c只規定了函式rand的返回值型別(即int)和返回值上界(即rand_max),也就是說,任何乙個具體的實現,只要rand_max不超過其所在平台int的正向最大值都是允許的(不然返回值發生溢位),例如,

在vc++2010和mingw gcc tdm 5.1 32bit中,rand_max=32767=0x7fff,即short int的正向最大值

在centos 7的gcc 4.8.2 x86_64中,rand_max=2147483647=0x7fffffff,即其int的正向最大值

ps:rand_max這個巨集定義位於stdlib.h中

在rand函式內,維護著乙個計數器,每次呼叫rand函式都會使計數器+1,然後計數器與種子發生運算,返回[0,rand_max]中的乙個整數,這也導致了每次執行相同的rand函式總是返回相同的值,如,

int i;

for (i=0;i<10;i++)

每次執行,得到的10個隨機數都相同。

void srand(unsigned int) : stdlib.h

依據傳入的無符號整數,來設定對應的隨機數種子,這個隨機數種子是全域性的變數,能夠被rand函式讀取,能夠被srand函式修改。

time_t time(time_t *) : time.h

返回從unix元年(2023年1月1日0點)到當前時間所經過的秒數,

typedef __time64_t time_t; : types.h

typedef __int64 __time64_t; : types.h

#define __int64 long long : _mingw.h

time函式獲取秒數有兩種方式,

1.直接通過函式的返回值獲取秒數,

2.通過傳入乙個time_t型別的位址,函式會將秒數也儲存到這個位址上,

當傳入的指標是null或0時,函式只通過返回值返回秒數。

由於秒數總是在向前變化,所以可以利用time函式的返回值來作為srand的傳入引數。

在寫這篇文章時,time(0)返回的值是1583975156,在unsigned int範圍內。

ps:rand函式使用線性同餘法實現隨機數,是偽隨機數,由於週期較長(至少是32767),因此在一定範圍內可以看成是隨機的。

c 隨機數函式rand

c語言中rand 函式生成隨機數的用法 詳細介紹 1 使用該函式首先應在開頭包含標頭檔案stdlib.h include c 建議使用 include,下同 2 在標準的c庫中函式rand 可以生成0 rand max之間的乙個隨機數,其中rand max 是stdlib.h 中定義的乙個整數,它與...

C語言rand 函式產生隨機數

include include int main 產生1 6之間的隨機數 執行結果 函式一 int rand void 返回乙個 0,rand max 間的隨機整數。函式二 void srand unsigned seed 引數seed是srand 的種子,用來初始化srand 的起始值。系統在呼叫...

c語言隨機數rand()筆記

標準庫 中 int rand void 函式是真正的隨機數生成函式,但是每次用rand 需要用srand設定的種子來產生隨機數。如果你不呼叫srand,系統會在rand之前自動加乙個srand 1 但是這樣一來種子就是固定的了,隨機數也是固定的,所以rand 也稱偽隨機數。為了達到真正的隨機,那麼關...