正如标题所示,我试图找出一种使用新的C++ 11 <random>库生成随机数的方法.我用这段代码尝试过:
std::default_random_engine generator;
std::uniform_real_distribution<double> uniform_distance(1, 10.001);
Run Code Online (Sandbox Code Playgroud)
我的代码的问题是,每次编译和运行它时,它总是生成相同的数字.所以我的问题是随机库中的其他函数可以在真正随机的情况下实现这一点吗?
对于我的特定用例,我试图获得该范围内的值 [1, 10]
今天,我的朋友想到了使用生成的伪随机数多次设置伪随机数生成器的种子以"使事情更随机化".
C#中的一个例子:
// Initiate one with a time-based seed
Random rand = new Random(milliseconds_since_unix_epoch());
// Then loop for a_number_of_times...
for (int i = 0; i < a_number_of_times; i++)
{
// ... to initiate with the next random number generated
rand = new Random(rand.Next());
}
// So is `rand` now really random?
assert(rand.Next() is really_random);
Run Code Online (Sandbox Code Playgroud)
但我认为这可能会增加将重复种子用于伪随机数生成器的机会.
请问这个
伪随机数发生器的任何专家都能给出一些详细的解释,以便我可以说服我的朋友吗?我很乐意在一些伪随机数生成器算法中看到解释更详细的答案.