【发布时间】:2016-08-08 08:44:06
【问题描述】:
我正在查看cppreference.com 生成正态分布随机数的示例,并稍微重构了代码以得到这个:
#include <iostream>
#include <random>
struct MyNormalDistribution {
static double getRandomNumber(double mean,double std_dev){
return std::normal_distribution<>(mean,std_dev)(MyNormalDistribution::generator);
}
private:
static std::random_device rand;
static std::mt19937 generator;
};
std::random_device MyNormalDistribution::rand;
std::mt19937 MyNormalDistribution::generator = std::mt19937(MyNormalDistribution::rand());
int main(int argc, char *argv[]) {
for (int t=0;t<10;t++){
std::cout << MyNormalDistribution::getRandomNumber(0,10) << std::endl;
}
}
但是,每当我运行它时,我都会得到相同的数字序列。是否有一些愚蠢的错误,或者 cppreference 上的示例没有包括正确的播种?
如何正确播种MyNormalDistribution?
【问题讨论】:
-
大多数平台/系统都有一个加密安全的伪随机数生成器 (CSPRNG),虽然不是真正的 RNG,但它们本质上是非确定性的。它们不需要由用户播种,并且会根据系统随机出现持续添加熵。
标签: c++ c++11 random random-seed