C語言rand 與srand 的簡單實現

2021-08-02 18:33:57 字數 1050 閱讀 9810

概述

#include

int rand(void)說明

函式rand計算乙個偽隨機整數序列,它們的範圍在0到rand_max之間。實現的行為不受rand函式的影響。

返回值函式rand返回乙個偽隨機整數。

環境限制

巨集rand_max的值至少應該為32767。

概述#include

void srand(unsigned int)說明

函式srand使用引數作為乙個新的偽隨機序列的種子,這個序列由後來對rand的呼叫返回。如果再用相同的種子呼叫srand,那麼偽隨機數序列就會重複。如果再對srand的任何呼叫之前呼叫rand,那麼它產生的序列和用1為引數第一次呼叫srand之後生成的序列相同。

實現的行為不受srand函式呼叫的影響。

返回值函式srand沒有返回值。

static

unsigned

long

int next = 1;

int rand(void) /* rand_max assumed to be 32767*/

void srand(unsigned

int seed)

如果我在密碼學課程中用上述方法產生隨機序列,我的老師肯定不會給我好臉色看。當然,如果只是要產生一些「看上去隨機」的數,這個方法還是特別簡單的。真實c執行庫的實現當然比上面的要複雜的多。

我寫這篇文章的目的就是打破同學們對c語言中rand()函式的神秘感,其實rand函式也沒有那麼高深莫測,你還能自己寫乙個(笑)。

有部分同學,還將srand函式放到迴圈體當中,每次迴圈都重新設定隨機種子,這完全是不必要的。從簡單實現可以看出,srand將種子seed放到next全域性變數中,以後呼叫rand函式,next會迭代計算。也就是說,種子只有設定一次就夠了。

偽隨機數也是乙個值得深入**的話題,我校有同學還研究過安卓平台上「真隨機數」的生成,具體情況我也不是很清楚,但總而言之,對隨機數的探索是有一定價值的。

C語言 rand 函式和srand 函式

from 標準庫 被包含於中 提供兩個幫助生成偽隨機數的函式 函式一 int rand void 從srand seed 中指定的seed開始,返回乙個 seed,rand max 0x7fff 間的隨機整數。rand max是vc 中stdlib.h 中巨集定義的乙個字元常量 define ran...

c語言裡函式rand()和srand()的用法

rand void 用於產生乙個偽隨機unsigned int 整數。srand seed 用於給rand 函式設定種子。srand 和 rand 應該組和使用。一般來說,srand 是對 rand 進行設定。比如 srand uint getcurrenttime int x rand 100 是...

srand 與 rand效能比較

include include include int main gettimeofday tv,null long us1 tv.tv usec std cout 測試1結束,時間戳 us1 時間差 us1 beginus std endl for int i 0 i 1000 i gettime...