问题标签 [mt19937]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
367 浏览

c++ - 重现 C++ 11 随机生成器的相同结果

标准是否保证如果std::mt19937以相同的数字作为种子,它将在所有平台上产生相同的数字序列?

换句话说,它的实现是否由标准明确定义,或者就像std::rand()被认为是实现细节一样?

0 投票
1 回答
31 浏览

visual-studio - 来自 boost 工具包的随机数调用

尝试在 Windows 7 Vis Studio 2013 上使用 Boost 工具包。

我在这里成功运行了他们的示例

代码中有一组行:

我注释掉 typedef 并替换为

正如指令所说,但问题是程序的其余部分无法识别这一点。我认为他们在那里留下了一些指示。有谁知道我需要做什么?

附录,完整的修复是这样的: 步骤 1. 包括相应的 hpp:

步骤 2. 使用正确的 typedef 语句: typedef boost::mt19937 base_generator_type;

0 投票
0 回答
90 浏览

c++ - 可预测的 uniform_int_distribution?

我正在寻找一种随机数生成算法(c++),它需要

  1. 穿制服
  2. 在任何平台上都具有确定性和不变性
  3. 您可以指定范围(最小,最大)

带有 uniform_int_distribution 的 mt19937 很接近,但结果在任何平台上都不是不变的。

所以希望大家能给我一些建议。提前致谢。

0 投票
3 回答
2009 浏览

c++ - 在 C++11 中保存和加载随机数生成器状态

这个问题之前已经被问过(stackoverflow),但(接受的)答案并不令人满意。

以下示例保存和加载状态,但取决于生成值的数量,它是否有效:

使用这些参数,它可以按预期工作。但是,如果我设置preN=3输出如下所示:

为什么断言不适用?现在我设置preN=3middleN=1输出是

如果我设置middleN为大于 1 的任何值,则断言适用。谁能解释发生了什么?我在做什么错或不理解?

在 Linux 上使用 GCC5.4.0 和 CLANG3.8.0 测试

0 投票
1 回答
779 浏览

c++ - 只有 std::mt19937 的实例在 c++11 中重复值

在程序中,经常会在不同的类中生成随机数。所以我想创建一个返回生成器 std::mt19937 的单个实例的类。我还考虑到某些编译器不适用于 std::random_device (为此,请检查熵的值)。我创建了一个类单例。

但是当我退出类生成器 std::mt19937 时,随机数开始重复。如何避免?

PS有没有比时间更好的初始化生成器的方法?

解决方案

在以下编译器下对此进行了测试:Visual Studio、MinGW、DevC++。

0 投票
1 回答
553 浏览

c++ - mt19937 和正态分布

你好!我刚开始用 C++ 编写代码,我不确定如何正确使用随机数生成器。例如,我需要 [0,30000] 范围内的数字,如何确保我不会只从我的范围内获得小数字。我的功能:

您介意帮我正确配置 normal_distribution 吗?

0 投票
2 回答
1659 浏览

c++ - C ++ 11随机数生成不起作用

我已经使用上面的代码生成了 1 到 50 之间的随机数。但是每当我运行程序时,生成的随机数都是相同的。我正在学习的一门在线课程有这个代码,它在讲师的 clang 编译器上运行得非常好。我正在使用 gcc 编译器。谁能告诉我需要做什么?谢谢你!!

0 投票
1 回答
32 浏览

c++ - 如何保存/检索 mt19937 以便重复序列?

这是我的尝试

这是一个可能的输出

我希望最后两个数字相同。显然,我没有写和/或读我的 mt19937。你能帮忙修复这段代码吗?

0 投票
0 回答
48 浏览

c++ - 如何在一个类中使用 mt19937 而不会在每个实例中获得相同的随机序列?

我正在编写代码以使用密度函数在相空间中初始化粒子位置。我想根据任意分布对它们的位置进行随机抽样,而我发现的最简单的方法是创建一个小类,其中包含根据我给它的概率数组进行抽样所需的一切。但是,我发现每次运行代码时都会得到相同的数字序列。

这是我使用的函数的定义

我发现,如果我在类的构造函数中执行相同的循环,以便在我初始化vose对象时运行它,它会按预期运行。这意味着它每次都会生成不同的随机序列。那么为什么当我在构造函数中执行此操作时它可以正常工作,但是当我在成员函数中使用它时它每次都输出相同的序列?

问题不在于我的编译器不支持种子生成。我正在使用该<chrono>库,当我在构造函数中打印出种子时,每次都不同。如果您认为构造函数中可能有问题,这里就是。

编辑:要非常清楚,当我在构造函数中运行该方法时,一切正常。但是,这显然不是我最终要运行它的地方,所以我需要弄清楚如何在代码的主要部分运行一个方法。

编辑:为了响应我隐藏生成器或其他东西的可能性,这里是头文件中的类声明。

0 投票
0 回答
354 浏览

c++ - std::random_device 是否限制 g++ 上的实例数量?

这个代码块

当 N 为 2000 或类似的高值时产生异常。运行时异常的错误信息是:

我找不到错误是否与 random_device 使用的一些 std::string 或 gcc 对此数字生成器的内部限制有关。但是 push_back 进入向量或在下一个 push_back 中取消引用似乎以某种方式使用它。

编译器是否可能不支持数千个随机数生成器?

rdThread是 (shared_ptr)random_device 向量。

rngThread是 mt19937 的向量。

distThread是均匀实数分布的向量。

在多线程部分中,少于 2000 个项目的所有项目都可以正常工作,但此错误仅在此初始化块上。

  • g++ (Ubuntu 5.4.1-2ubuntu1~16.04) 5.4.1
  • C++1y 方言开启
  • 优化 O3 开启
  • -m64 -mtune=包含通用编译选项