如何避免相同的随机数序列

Pol*_*ear 5 c++ random c++-standard-library

我想生成不同序列的均匀分布的样本。为此,我用不同的种子初始化了默认的随机引擎,但产生了相同的序列:

#include <iostream>
#include <random>

void fun(double seed)
{
    std::cout << "given seed: " << seed << std::endl;
    std::default_random_engine gen_2(seed);
    std::uniform_real_distribution<double> dis_2(0.0,1.0);
    std::cout << dis_2(gen_2) << std::endl;
    std::cout << dis_2(gen_2) << std::endl;
}

int main()
{
    double seed = 1.0;
    std::default_random_engine gen_1(seed);
    std::uniform_real_distribution<double> dis_1(0.0,1.0);
    for(size_t i=0; i<3; ++i)
    {
        fun(dis_1(gen_1));
    }
}
Run Code Online (Sandbox Code Playgroud)

输出如下:

给定种子:0.0850324

0.0850324

0.891611

给定种子:0.891611

0.0850324

0.891611

给定种子:0.18969

0.0850324

0.891611

如何在函数中生成不同的序列fun

eer*_*ika 5

生成器的种子是一个整数。

问题是您生成的所有数字dis_1都小于 1,并且大于或等于 0。因此,当转换为整数时,它们会隐式转换为相同的值 0。

解决方案是使用不同的种子,而不是始终使用 0。