首页 >后端开发 >C++ >为什么我的随机数生成器不断生成相同的序列?

为什么我的随机数生成器不断生成相同的序列?

Patricia Arquette
Patricia Arquette原创
2024-12-09 00:01:101033浏览

Why Does My Random Number Generator Keep Producing the Same Sequence?

随机数生成器重置为相同序列

每次执行使用 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,随机数生成器的状态变得更加不可预测,从而导致更加多样化的结果。

有关更多见解,请参阅这些资源:

  • http://www.dreamincode.net/forums/topic/24225-random-number- Generation-102/
  • h ttp://www.dreamincode.net/forums/topic/29294-making-pseudo-random-number-generators-more-random/

以上是为什么我的随机数生成器不断生成相同的序列?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn