亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

srand(time(NULL))更改種子值的速度不夠快

srand(time(NULL))更改種子值的速度不夠快

C
慕田峪7331174 2019-12-03 16:33:17
我在C中編寫了一個簡單的隨機數生成器。int l下限int u是上限。它工作正常,但是我對播種有疑問。如果要以循環方式運行此代碼,請time(NULL)不要足夠快地更改種子值,以防止獲得一系列連續的完全相同的隨機數。我想知道其他人怎么可能解決這個問題。我在網上找到的所有示例都time(NULL)用作種子價值生成器。int generateRandom(int l, int u){   srand(time(NULL));   int r = rand() % ((u - l) + 1);   r = l + r;   return r;}如果我是緊挨著彼此碰撞的幾行代碼,無論是Rand1和Rand2是完全一樣的。printf("Rand1 = %d\n", generateRandom(10, 46));printf("Rand2 = %d\n", generateRandom(10, 46));
查看完整描述

3 回答

?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

srand(time(NULL))應該只運行一次以初始化PRNG。當應用程序啟動時,在Main中執行此操作。


說明:


PRNG(偽隨機數生成器)根據所使用的算法生成確定性的數字序列。給定的算法將始終從給定的起點(種子)產生相同的序列。如果您未明確為PRNG設置種子,那么通常每次運行應用程序時,PRNG將從相同的默認種子開始,從而導致使用相同的數字序列。


要解決此問題,您需要在每次運行應用程序時為PRNG自己添加不同的種子(以提供不同的序列)。通常的方法是使用time(NULL)根據當前時間設置種子。只要您不彼此之間在一秒鐘內啟動應用程序的兩個實例,就可以保證使用不同的隨機序列。


每次需要新的隨機數時,都無需為序列設定種子。我不確定這一點,但是我有一種感覺,根據所使用的PRNG算法,對每個新數字進行重新播種實際上可能會導致結果序列中的隨機性降低。


查看完整回答
反對 回復 2019-12-03
?
阿波羅的戰車

TA貢獻1862條經驗 獲得超6個贊

不要每次僅在程序開始時就對其進行播種。


另外,許多書籍建議不要使用C-lib標準隨機函數。如果您需要良好的偽隨機數,請在Press等人的《數字食譜》第三版中找到一個好的算法。版。


查看完整回答
反對 回復 2019-12-03
  • 3 回答
  • 0 關注
  • 1320 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號