播种default_random_engine?

时间:2014-02-28 21:10:14

标签: visual-studio-2010 c++11 random

我正在使用不支持<chrono>的visual studio 2010,所以我必须播种default_random_engine。因此,我决定用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);

我得到了我期望为这两种方法获得的东西。我的问题是,我应该注意使用rand()吗? (注意:我别无选择<chrono>

2 个答案:

答案 0 :(得分:16)

我建议从std::random_device抓取种子:

std::default_random_engine engine(std::random_device{}());

应该为您提供比std::time明显更多的熵。

答案 1 :(得分:5)

根据http://www.cplusplus.com/reference/random/random_device/,他们建议您不要使用std::random_device,因为它不可移植:

  

请注意,随机设备可能无法始终可用   随机数(在某些系统中,它们甚至可能永远不会   可用)。

在相关页面(http://www.cplusplus.com/reference/random/linear_congruential_engine/linear_congruential_engine/)上,他们提供以下内容作为创建种子的示例:

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