C 在1秒內生成不同的隨機數

2021-08-02 10:48:07 字數 1188 閱讀 1440

或許你們都能看得到

srand((unsigned)time(null));//初始化乙個當前時間的種子

int _value=rand()%10;//產生乙個隨機數

它是能產生乙個0~10的隨機數**.

如果去除第一行的** 或許你們因該知道 每次執行此**的時候產生的值都是一樣的.

關鍵就是在於初始化的種子 而種子如果固定的話 產生的隨機數每次也一定都是一樣的.

所以 以上**中使用了當前時間為種子 因為每次時間都是不同的 所以種子也是不同的 但 有一點不好 就是 它不能在同小於1秒的時間內 產生不同的種子 也就是說 它的作用範圍在1秒以內 單位為秒 所以 在連續使用兩次srand((unsigned)time(null))的中間 至少要間隔1秒 否則產生的隨機數還是一樣的.

srand((unsigned)time(null));

int _value=rand()%10;

srand((unsigned)time(null));

_value=rand()%10;

這樣的情況是常有的 可你們應該發現 兩次的結果都是一樣的

srand((unsigned)time(null));

int _value=rand()%10;

sleep(1000);

srand((unsigned)time(null));

_value=rand()%10;

這樣或許可以做到 因為在兩次呼叫之間延時了1秒 所以兩次產生的數是不同的

要在1秒鐘內執行n次隨機怎麼辦?

我也想了許久 問題很明了 只要使初始種子的單位比秒更小即可. 要使它在1秒鐘之內變化n次 如何做到? 取硬體精度計數器 它能獲得比秒更小的單位.

large_integer seed;

queryperformancefrequency(&seed);

queryperformancecounter(&seed);

srand(seed.quadpart);//初始化乙個以微秒為單位的時間種子

int _value=rand()%10;//產生乙個隨機數

可以將它寫成乙個函式

int randex()

int _value=randex()%10;//產生乙個隨機數

作用與一開始的語句是一樣的 但在連續呼叫這條語句的時候 每次產生的隨機數都是不同的 而用第一段**的話 則很可能是一樣的.

C 生成隨機數 生成任意範圍內的等概率隨機數

如果讓你用c 來生成0 n 1之間的隨機數,你會怎麼做?你可能會說,很簡單,看 srand unsigned time null rand n 仔細想一下,這個結果是隨機的嗎 當然,我們不考慮rand 函式的偽隨機性 不是的,因為rand 的上限是rand max,而一般情況下,rand max並不...

C 隨機生成區間範圍內的隨機數

要取得 a,b 的隨機整數,使用 rand b a a 要取得 a,b 的隨機整數,使用 rand b a 1 a 要取得 a,b 的隨機整數,使用 rand b a a 1 通用公式 a rand n 其中的a是起始值,n是整數的範圍。要取得a到b之間的隨機整數,另一種表示 a int b ran...

c 生成指定範圍內的隨機數

函式名稱 randgenerator 隨機數發生器 引數 dwrandmaxval 隨機數最大值 dwrandminval 隨機數最小值 dwrandcount 隨機數個數 mrandvalue 隨機數結果 itor first 儲存的隨機數 itor second 保留沒有 返回值 return ...