草庐IT

c++ - std::default_random_engine 即使改变种子也会生成相同的值?

我正在尝试实现一个类,该类将用作随机库的某种包装器,以便我可以(我认为)在我的代码中的其他地方以更直观的方式使用它的对象和函数。在我的标题中有这样的内容:classRandomDevice{private:unsignedlongrand_seed;default_random_engineengine;public:RandomDevice(unsignedlongn);intrandInt(intmin,intmax);};然后在.cpp文件中我实现了这两个函数(constructor和randInt),如下所示:RandomDevice::RandomDevice(unsigne

c++ - MPI中每个进程的随机数

我正在使用MPICH2来实现“奇偶”排序。我做了实现,但是当我随机分配给每个进程他的值时,相同的数字被随机分配给所有进程。这里是每个进程的代码,每个进程随机化了他的值..intmain(intargc,char*argv[]){intnameLen,numProcs,myID;charprocessorName[MPI_MAX_PROCESSOR_NAME];intmyValue;MPI_Init(&argc,&argv);MPI_Comm_rank(MPI_COMM_WORLD,&myID);MPI_Comm_size(MPI_COMM_WORLD,&numProcs);MPI_Ge

c++ - 在 C++ 中找出随机数生成器的种子

我有一个非托管C++控制台应用程序,我在其中使用了srand()和rand()。我不需要它来解决特定问题,但很好奇:传递给srand()的原始种子是否存储在我可以查询的内存中的某个位置?有没有办法弄清楚种子是什么? 最佳答案 不需要存储种子,只需要存储最后返回的随机数。这是手册页中的示例:staticunsignedlongnext=1;/*RAND_MAXassumedtobe32767*/intmyrand(void){next=next*1103515245+12345;return((unsigned)(next/65536

c++ - 如果我们在不同的机器上将 c++11 mt19937 作为相同的种子,我们会得到相同的随机数序列吗

灵感来自this和类似的问题,我想了解C++11中的mt19937伪数生成器在两台不同的机器上的行为如何,它使用相同的输入作为种子。换句话说,假设我们有以下代码;std::mt19937gen{ourSeed};std::uniform_int_distributiondest{0,10000};intrandNumber=dist(gen);如果我们在不同的时间在不同的机器上尝试这段代码,我们每次会得到相同的randNumber值序列还是不同的序列?无论哪种情况,为什么会这样?进一步的问题:不管种子是什么,这段代码会无限生成随机数吗?我的意思是,比如说,如果我们在一个运行数月不间断运

C++ rand () 没有提供基于种子的正确数字

我正在为我的类(class)做C++作业,我们必须使用种子为99的rand()来生成一组值。但是,我的问题是,当我尝试在我们的参数内创建一个值时,该数字与教师为我们提供的第一个确定数字不同。代码如下所示:intlottoNumber;srand(RANDOM_NUMBER_SEED);do{lottoNumber=rand();}while(lottoNumber>25||lottoNumber由此产生的值(value)是13,而预期产生的数字是2。任何关于为什么不同的帮助都会很好,谢谢! 最佳答案 rand()使用的算法是实现定义

c++ - 播种随机数生成器 C++

这个问题在这里已经有了答案:HowtogeneratearandomnumberinC++?(14个答案)关闭5年前。我有两个问题。在不使用srand(time(NULL))的情况下,还有哪些其他方法可以在C++中为伪随机数生成器提供种子?我问第一个问题的原因。我目前使用时间作为生成器的种子,但生成器返回的数字始终相同。我很确定原因是因为存储时间的变量在某种程度上被截断了。(我有一条警告消息说,“隐式转换失去整数精度:'time_t'(又名'long')到'unsignedint')我猜这告诉我本质上我的种子要到明年才会改变发生。出于我的目的,使用时间作为我的种子会工作得很好,但我不知

C++。 RNG 是否有可能在使用相同种子的两台不同机器中给出不同的随机变量?

我有一段冗长而复杂的源代码,它使用带有修复种子的随机数生成器。这段代码是一个模拟器,这个模拟器的参数就是这个RNG给出的随机值。当我在同一台机器上执行代码时,无论我尝试多少次,输出都是一样的。但是当我在两台不同的机器上执行这段代码并比较两台机器的输出时,它们是不同的。是否有可能两台不同的机器使用相同的随机数生成器和相同的种子给出不同的输出?编译器版本、库和操作系统相同。 最佳答案 这当然是可能的,因为RNG可能会将机器特定数据与种子(例如网卡地址)结合起来以生成随机数。它基本上是特定于实现的。

c++ - 为什么 linear_congruential_engine::seed(Sseq) 会丢弃种子序列生成的三个数字?

C++标准(从C++11一直到当前的C++17草案)在[rand.eng.lcong]中说明如下:templateexplicitlinear_congruential_engine(Sseq&q);Effects:Constructsalinear_congruential_engineobject.Withk=⌈log2(m)÷32⌉andaanarray32(orequivalent)oflengthk+3,invokesq.generate(a+0,a+k+3)andthencomputesS=(∑j=0k−1aj+3·232​j)modm.Ifcmodmis0andSis0,

c++ - boost 梅森扭曲器 : how to seed with more than one value?

我正在使用boostmt19937实现进行模拟。模拟需要可重现,这意味着存储RNG种子并可能在以后重复使用。我正在使用windowscryptoapi生成种子值,因为我需要种子的外部来源,而不是因为任何特定的随机性保证。任何模拟运行的输出都会有一个注释,包括RNG种子-所以种子需要相当短。另一方面,作为模拟分析的一部分,我将比较几次运行——但为了确保这些运行实际上不同,我需要使用不同的种子——所以种子需要足够长以避免意外碰撞。我已经确定64位的播种应该足够了;在大约2^32次运行后发生碰撞的可能性将达到50%——这个概率足够低,以至于由它引起的平均错误对我来说可以忽略不计。仅使用32位

c++ - 我将如何制作随机种子/哈希以使 Rand 实际上是随机的?

这个问题在这里已经有了答案:Isthereanalternativetousingtimetoseedarandomnumbergeneration?(10个答案)关闭6年前。我如何生成一个种子或散列来使rand实际上是随机的?每次它选择一个数字时我都需要改变它。C++的新手,所以我不太确定该怎么做。谢谢!:D