【问题标题】:Generate more than one random value using Mersenne-Twister使用 Mersenne-Twister 生成多个随机值
【发布时间】:2018-01-31 23:08:05
【问题描述】:

我最近在使用Mersenne-Twister 算法在 C++ 中生成随机数时遇到了一个问题。当迭代for循环并使用cout输出生成的数字时,它会重复输出相同的数字。例如,它输出类似11 11 11 而不是11 43 124。我将如何用代码实现这一点?我当前的代码发布在下面。

#include <iostream>
#include <random>
#include <Windows.h>
#include <unistd.h>

using namespace std;

int main() 
{
  random_device rd;
  mt19937 gen(rd());
  uniform_int_distribution<> dis(15000, 120000);
  int random = dis(gen);

  int i = 1;
  while (i = 1) {
    cout << random << endl;
}
return 0;

非常感谢任何帮助。

【问题讨论】:

  • 您需要在循环中调用dis(gen)。正如所写,您的价值 random 在分配后永远不会改变
  • random 在您重新分配之前不会更改
  • 您不会在循环中获得新的随机数,您只是一遍又一遍地打印相同的随机数。在您的 while 循环中再次调用 random = dis(gen)

标签: c++


【解决方案1】:

random 是一个整数对象。除非您设置它的值,否则整数对象的值不会改变。你在这里所做的类似于掷骰子,写下随机结果,然后反复阅读你写的内容,期望写出的结果会改变。

您可以通过在分布函数上多次应用生成器对象来生成多个随机数:

while (...)
    cout << dis(gen) << endl;

【讨论】:

    【解决方案2】:

    您需要将获取随机数的命令放入循环,否则您只需一遍又一遍地打印相同的值:

    int i = 1;
    while (i = 1) {
    
        int random = dis(gen); // get a new random number
        cout << random << '\n'; // print it
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-18
      • 2014-03-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-20
      • 2017-04-05
      • 2015-02-27
      • 2014-02-22
      相关资源
      最近更新 更多