Visual studio 2010 播种默认\u随机\u引擎?

Visual studio 2010 播种默认\u随机\u引擎?,visual-studio-2010,c++11,random,Visual Studio 2010,C++11,Random,我使用的是visual studio 2010,它不支持,因此我必须为默认\u随机\u引擎添加种子。因此,我决定用rand作为种子,如下所示 srand((unsigned int)time(NULL)); std::default_random_engine engine(rand()); std::normal_distribution<double> randn(0.0, 0.3); unsigned seed = std::chrono::system_clock::now

我使用的是visual studio 2010,它不支持
,因此我必须为
默认\u随机\u引擎
添加种子。因此,我决定用
rand
作为种子,如下所示

srand((unsigned int)time(NULL));
std::default_random_engine engine(rand());
std::normal_distribution<double> randn(0.0, 0.3);
unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
std::default_random_engine engine(seed);
std::normal_distribution<double> randn(0.0, 0.3);
srand((unsigned int)time(NULL));
std::默认的随机引擎(rand());
标准:正态分布randn(0.0,0.3);
而不是下面的

srand((unsigned int)time(NULL));
std::default_random_engine engine(rand());
std::normal_distribution<double> randn(0.0, 0.3);
unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
std::default_random_engine engine(seed);
std::normal_distribution<double> randn(0.0, 0.3);
unsigned seed=std::chrono::system_clock::now().time_since_epoch().count();
std::默认的随机引擎(seed);
标准:正态分布randn(0.0,0.3);

这两种方法我都能得到我期望得到的东西。我的问题是,使用rand()时,我应该注意哪些注意事项?(注意:我没有选择使用

我建议从以下位置获取种子:

这将为您提供比
std::time

更大的熵。根据,他们建议您不要使用
std::random\u设备,因为它不便于携带:

请注意,随机设备可能并不总是可用于生产 随机数(在某些系统中,它们甚至可能永远不会是随机数) 可用)

在相关页面()上,他们给出了以下创建种子的示例:

unsigned seed1 = std::chrono::system_clock::now().time_since_epoch().count();

您可能想阅读一篇博客,内容是关于使用少量数字和/或使用当前时间进行种子设定时出现的问题。@Kaspervendenberg,惊人的链接。非常感谢。两个答案都是正确的,但这是最安全的。如果在PRNG中获得最大熵很重要,还可以检查随机_设备的熵(std::random_device::entropy()如果使用prng生成种子,则返回0,因此这不是一个好选项),如果太低,则使用上面的time_-since_epoch()调用。