随机数生成器重置为相同序列
每次执行使用 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中文网其他相关文章!