是否有任何关于gcc的g++中随机数生成器的周期性的文献(如果我们不重新设置函数的种子)?我想我可以自己进行测试,但最好能获得经过充分验证的研究。预先感谢您的帮助。//编辑我只是想补充一点,我已经用多个引擎进行了相当多的搜索,但没有找到任何具体的内容。我只阅读了关于周期性受表示种子所需位数限制的一般性评论。(所以我想考虑到srand通常随时间调用,周期性不会超过10^12左右。但在我开始实现我的算法之前,更明确的东西会非常有帮助。) 最佳答案 在rand(3)手册页中搜索时,我发现了这个:Theversionsofrand()and
我一直在研究Xorshift*随机数生成器,我遇到了this探索它们的属性。从该站点引用(强调我的):Howcanaxorshift64*generatorbeslowerthanaxorshift1024*generator?Dependencies.Thethreexor/shiftsofaxorshift64*generatormustbeexecutedsequentially,aseachoneisdependentontheresultofthepreviousone.Inaxorshift1024*generatortwoofthexor/shiftsarecomplet
__forceinlinestaticintRandom(){intx=214013,y=2531011;seed=(x*seed+y);return((seed>>16)&0x7FFF)-0x3FFF;}上面的代码返回具有良好均匀分布的PRNG。现在将x更改为x+1-生成的序列不能再称为PRNG。那么(这个)PRNG背后的理论是什么?“x和y是精心挑选的”,但它们是如何选择的? 最佳答案 这看起来像一个Linearcongruentialgenerator.当乘数x可被模减一的所有质因数整除时,LCG更好(此处为0x3FFFFFF
我一直在尝试创建一个通用的渐变噪声生成器(它不使用散列方法来获取渐变)。代码如下:classGradientNoise{std::uint64_tm_seed;std::uniform_int_distributiondistribution;conststd::arrayvector_choice={glm::vec2(1.0,1.0),glm::vec2(-1.0,1.0),glm::vec2(1.0,-1.0),glm::vec2(-1.0,-1.0)};public:GradientNoise(uint64_tseed){m_seed=seed;distribution=std
我已经看到很多关于每次执行时不要多次为伪随机数生成器播种的建议,但从未伴随过详尽的解释。当然,很容易看出为什么以下(C/C++)示例不是一个好主意:intget_rand(){srand(time(NULL));returnrand();}因为每秒多次调用get_rand会产生重复的结果。但是下面的例子难道不是一个可以接受的解决方案吗?MyRand.h#ifndefMY_RAND_H#defineMY_RAND_HclassMyRand{public:MyRand();intget_rand()const;private:staticunsignedintseed_base;};#en
我有一个循环。在循环内部,在每次迭代中,我需要从U[0,1]中提取一个数字。如何使用openmp,并且保证随机数生成过程不被污染?有人建议我需要一个线程安全的随机数生成器,这可能是也可能不是我的问题的解决方案。我的问题与另一个问题非常相关,但我想从连续统U[0,1]中得出一些细微差别。另外,我不知道如何通过线程播种生成器,有人可以写一行代码吗? 最佳答案 基于已经mentionedsolution,这里有一个适合您特定需求的版本:doubledoubleRand(doublemin,doublemax){thread_localst
我有一个循环,我在其中向某些点添加噪声;这些后来被用作一些统计测试的基础。涉及的数据集非常大,所以我想使用openMP将其并行化以加快处理速度。当我想要多个PRNG时,问题就出现了。我有自己的基于NR模方法(我认为是rand4)的PRNG类,但我不确定如何正确播种PRNG以确保适当的熵通常我会做这样的事情prng.initTimer();但是如果我有一组prng,每个工作线程一个,那么我不能简单地在每个实例上调用initTimer——计时器可能不会改变,计时器关闭可能会引入相关性。我需要防止自然相关性,而不是恶意攻击者(这是实验数据),所以我需要有一种安全的方法来为rng数组做种。我想
问:如何从先验未知范围生成(许多)均匀分布的整数?就性能(数百万个生成的数字)而言,首选方式是什么?上下文:在我的应用程序中,我必须在许多地方生成许多伪随机数。我对生成器使用单例模式来保持应用程序运行的可重复性。在我的例子中,分布总是均匀的,但问题是有太多可能的范围来预先制作C++11风格的分布对象。我的尝试:对此有两个明显的解决方案,第一个是使用一次性分布对象,第二个是使用模数将随机数从尽可能广泛的范围转换为所需的范围。但不知何故,我怀疑这些是最好的:)#include#include#include"limits.h"usingnamespacestd;mt19937mt;unif
我需要在PHP中创建一个可证明公平(确定性和种子)加密安全(CS)随机数生成器。我们正在运行PHP5,而PHP7现在并不是一个真正的选择。但是,我找到了PHP7的新CS函数的polyfill,所以我已经实现了该解决方案(https://github.com/paragonie/random_compat)。我认为srand()可用于为random_int()设置种子,但现在我不确定是否是这样。CSPRNG甚至可以播种吗?如果可以播种,输出是否是确定性的(相同的随机结果,给定相同的种子)?这是我的代码:require_once($_SERVER['DOCUMENT_ROOT']."/li
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我知道鼓励使用mt_rand()而不是rand()因为它使用MersenneTwister而不是任何PRNGrand()使用,但这里有一些似乎从未被考虑在内的因素:用户事件。事实上,用户的行为可以被认为是非常随机的。例如,在任何给定时刻,用户可能有4%的几率触发一个功能的rand()调用,一个用户触发三个rand()的几率为8%调用和一个shuffle()