问题标签 [mersenne-twister]
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 - 从使用 Mersenne Twister 获得的数字中只取几位是否安全
我必须使用现在退休的员工生成的一些代码,并且我对随机数有一些奇怪的事情。在某些时候,他将 PRNG 返回的值向右移动 10 位,然后对该值使用掩码。
我已经在互联网上看到一些 PRNG 的随机性很差,它们生成的数字中有一些位(如最后一个,只是在 1 和 0 之间交替),但我已经搜索过是否存在一些关于此类问题的垃圾Mersenne Twister,但我没有找到。有人知道吗?
c++ - mt19937 和 uniform_real_distribution
我试图找到一种有效的方法来实现统一(0,1)分布。由于我要生成非常大量的样本,所以我选择了 mt19937 作为引擎。我正在使用来自 boost 库的版本。我的问题是:使用引擎本身的输出与使用 uniform_real_distribution 有什么区别?
选项1
选项 #2
根据我的测试,选项 #2 在运行时方面比选项 #1 好得多。有什么理由我应该选择选项 #1 而不是选项 #2?
c++ - Random real in [0..1[ using Mersenne Twister
I'm trying to make a model of a zombie apocalipse in c++ using simple structs and a when I'm randomizing the population, I need some fields of the struct to have a value in the interval [0..1[. As I'm interested in a more statistically correct analysis, I choose to use the mt19937 engine to generate my "data". When playing around with this PRNG I couldn't find a way to generate a number in said range. Here's the code that I came up with:
But the only outputs that I get for the loop are zeros (0). A small print of the output is down:
Any ideas?
c++ - 如何在函数中运行 Mersenne Twister?
我有一小段代码运行 Mersenne Twister PRNG,效果很好:
它输出十个随机数。但是,如果我将完全相同的代码放入函数中:
它输出相同的数字十次。我刚开始使用 C++,所以我不知道是什么原因造成的,也不知道如何解决这个问题。
编辑:问题出在 std::random_device 上。它可能是 Eclipse C++ IDE(Luna 版本)或 MinGW 4.8.1 中的一个错误,但无论出于何种原因,随机数总是相同的。我相信 time(0) 将是适合我使用的种子。
编辑 2:考虑到 TC 的建议以及 time(0) 仍然导致十个相同数字的事实,这是迄今为止的最终代码。我知道 rand() 不好,但它有效。
c++ - 在随机双精度范围内创建随机整数
我从 mersenne twister 获得随机双数 [0,1)。我如何从 mersenne twister 输出中获得随机 [0,x)?
Mersenne twister 输出总范围内的随机整数或随机 [0,1)
它的均匀分布很重要,所以我怀疑基本 floor(mersenneRandom()*x) 会不会。
如果是这样,那就太好了。
c++ - 我应该如何为小于标准的 std::mersenne_twister_engine 选择参数?
我需要一个“足够好”的 C++11 随机数生成器,我可以在其中保存和恢复状态。我希望保存的状态明显小于此代码生成的 6.6kb 左右
std::mersenne_twister_engine有大量参数。这有点吓人。
就我的目的而言,数十亿的时间就足够了。我听说过 TinyMT,这可能是合适的,但看不到如何将其实现为模板专业化。
我应该如何选择参数?我怀疑如果我只是将“状态大小”参数减少到几个词,它会严重崩溃。
我会考虑完全使用不同的引擎,但除了容忍适度的时期外,我不想牺牲统计随机性的质量。像下面这样的人工制品(对于线性同余)是不可接受的。
c++ - 使用 Boost.Random 从种子生成多精度整数
我正在尝试使用 C++ 的 Boost 多精度库来生成大随机数。我无法创建一个按时间或另一个随机数播种的生成器,因此我的生成器在每次运行时都会产生相同的数字。如何使用不断变化的值为生成器播种以在每次运行时产生不同的值?这是有效但在每次运行时产生相同值的代码:
我之前成功播种了 std mersenne twister:
但我不确定如何播种多精度 mt。如果我尝试将任何参数附加到 generator_type 声明,我会收到错误消息。
c++ - 我可以从 random_device 和 mt19937 的组合中生成加密安全的随机数据并重新播种吗?
我需要在 c++11 中生成加密安全的随机数据,我担心对所有数据使用 random_device 会严重限制性能(参见 Stephan T. Lavavej 的“ rand()被认为是有害的”幻灯片 23,他说当他(在他的系统上)测试它时,random_device 为 1.93 MB/s,mt19937 为 499 MB/s)因为此代码将在移动设备(通过 JNI 和 iOS 的 Android)上运行,这可能比上面的数字慢。
此外,我知道 mt19937 不是加密安全的,来自维基百科:“观察足够数量的迭代(在 MT19937 的情况下为 624,因为这是产生未来迭代的状态向量的大小)允许一个人预测所有未来的迭代”。
考虑到以上所有信息,我是否可以通过每 624 次 mt19937 迭代从 random_device 生成一个新的随机种子来生成密码安全的随机数据?或者(可能)更好的是,每 X 次迭代,其中 X 是 1 到 624 之间的随机数(来自 random_device 或由 random_device 播种的 mt19937)?