隨機數產生器重設為相同序列
每次執行使用rand() 函數的程式時,您可能會注意到它產生相同的數字序列。發生這種情況是因為隨機數產生器的種子未初始化。
要產生更不可預測的結果,請使用 srand((unsigned int)time(NULL)) 設定隨機數產生器的種子。此函數使用當前時間作為種子,為產生的數字提供更多變化。考慮以下程式碼:
#include <iostream> #include <cstdlib> #include <ctime> using namespace std; int random(int low, int high) { if (low > high) return high; return low + (rand() % (high - low + 1)); } int main() { srand((unsigned int)time(NULL)); cout << random(2, 5) << endl; return 0; }
rand() 函數本質上不是隨機的,而是利用數學變換。每次呼叫 rand() 都會根據種子或先前的隨機數產生一個結果,從而建立一個無需明確初始化的可預測序列。透過使用具有真正隨機值(例如當前時間)的 srand,隨機數產生器的狀態變得更加不可預測,從而導致更加多樣化的結果。
更多見解,請參閱這些資源:
以上是為什麼我的隨機數產生器會不斷產生相同的序列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!