使用rand() 在函數內產生真正的隨機值
在C 中,使用rand() 在單一函數內產生隨機數函數可以產生重複值。當每次呼叫 rand() 之前重複呼叫 srand() 時,就會出現此問題。
問題:
考慮您提供的範例:
string PullOne() { string pick; string choices[3] = {"BAR", "7", "cherries"}; std::srand(time(0)); pick = choices[(std::rand() % 3)]; return pick; }
從main() 多次呼叫PullOne() 時,您期望pull_1 有不同的隨機值,拉_2 和拉_3。但是,您始終獲得相同的結果。
解決方案:
要解決此問題,請將srand() 的呼叫移到PullOne() 函數之外並放置在程式開始時就執行一次。透過這樣做,您可以初始化隨機數產生器一次,確保為後續的 rand() 呼叫產生真正的隨機序列。
// srand() is now called only once, at program initialization. int main() { std::srand(time(0)); string pull_1, pull_2, pull_3; pull_1 = PullOne(); pull_2 = PullOne(); pull_3 = PullOne(); return 0; }
解釋:
srand () 設定隨機數產生器的種子。當重複使用相同的種子時,生成器會產生相同的序列。透過初始化 srand() 一次,種子在整個程式中保持一致,從而導致 rand() 的可預測且非隨機的輸出。
因此,僅呼叫 srand() 一次至關重要,最好是在程式期間初始化或隨機數產生過程開始時。這確保了您的函數內產生真正的隨機數。
以上是為什麼在 C 函數中重複使用'srand()”會導致非隨機結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!