问题标签 [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.
c++ - 重现 C++ 11 随机生成器的相同结果
标准是否保证如果std::mt19937
以相同的数字作为种子,它将在所有平台上产生相同的数字序列?
换句话说,它的实现是否由标准明确定义,或者就像std::rand()
被认为是实现细节一样?
visual-studio - 来自 boost 工具包的随机数调用
尝试在 Windows 7 Vis Studio 2013 上使用 Boost 工具包。
代码中有一组行:
我注释掉 typedef 并替换为
正如指令所说,但问题是程序的其余部分无法识别这一点。我认为他们在那里留下了一些指示。有谁知道我需要做什么?
附录,完整的修复是这样的: 步骤 1. 包括相应的 hpp:
步骤 2. 使用正确的 typedef 语句: typedef boost::mt19937 base_generator_type;
c++ - 可预测的 uniform_int_distribution?
我正在寻找一种随机数生成算法(c++),它需要
- 穿制服
- 在任何平台上都具有确定性和不变性
- 您可以指定范围(最小,最大)
带有 uniform_int_distribution 的 mt19937 很接近,但结果在任何平台上都不是不变的。
所以希望大家能给我一些建议。提前致谢。
c++ - 在 C++11 中保存和加载随机数生成器状态
这个问题之前已经被问过(stackoverflow),但(接受的)答案并不令人满意。
以下示例保存和加载状态,但取决于生成值的数量,它是否有效:
使用这些参数,它可以按预期工作。但是,如果我设置preN=3
输出如下所示:
为什么断言不适用?现在我设置preN=3
和middleN=1
输出是
如果我设置middleN
为大于 1 的任何值,则断言适用。谁能解释发生了什么?我在做什么错或不理解?
在 Linux 上使用 GCC5.4.0 和 CLANG3.8.0 测试
c++ - 只有 std::mt19937 的实例在 c++11 中重复值
在程序中,经常会在不同的类中生成随机数。所以我想创建一个返回生成器 std::mt19937 的单个实例的类。我还考虑到某些编译器不适用于 std::random_device (为此,请检查熵的值)。我创建了一个类单例。
但是当我退出类生成器 std::mt19937 时,随机数开始重复。如何避免?
PS有没有比时间更好的初始化生成器的方法?
解决方案
在以下编译器下对此进行了测试:Visual Studio、MinGW、DevC++。
c++ - mt19937 和正态分布
你好!我刚开始用 C++ 编写代码,我不确定如何正确使用随机数生成器。例如,我需要 [0,30000] 范围内的数字,如何确保我不会只从我的范围内获得小数字。我的功能:
您介意帮我正确配置 normal_distribution 吗?
c++ - C ++ 11随机数生成不起作用
我已经使用上面的代码生成了 1 到 50 之间的随机数。但是每当我运行程序时,生成的随机数都是相同的。我正在学习的一门在线课程有这个代码,它在讲师的 clang 编译器上运行得非常好。我正在使用 gcc 编译器。谁能告诉我需要做什么?谢谢你!!
c++ - 如何保存/检索 mt19937 以便重复序列?
这是我的尝试
这是一个可能的输出
我希望最后两个数字相同。显然,我没有写和/或读我的 mt19937。你能帮忙修复这段代码吗?
c++ - 如何在一个类中使用 mt19937 而不会在每个实例中获得相同的随机序列?
我正在编写代码以使用密度函数在相空间中初始化粒子位置。我想根据任意分布对它们的位置进行随机抽样,而我发现的最简单的方法是创建一个小类,其中包含根据我给它的概率数组进行抽样所需的一切。但是,我发现每次运行代码时都会得到相同的数字序列。
这是我使用的函数的定义
我发现,如果我在类的构造函数中执行相同的循环,以便在我初始化vose
对象时运行它,它会按预期运行。这意味着它每次都会生成不同的随机序列。那么为什么当我在构造函数中执行此操作时它可以正常工作,但是当我在成员函数中使用它时它每次都输出相同的序列?
问题不在于我的编译器不支持种子生成。我正在使用该<chrono>
库,当我在构造函数中打印出种子时,每次都不同。如果您认为构造函数中可能有问题,这里就是。
编辑:要非常清楚,当我在构造函数中运行该方法时,一切正常。但是,这显然不是我最终要运行它的地方,所以我需要弄清楚如何在代码的主要部分运行一个方法。
编辑:为了响应我隐藏生成器或其他东西的可能性,这里是头文件中的类声明。
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=包含通用编译选项