我正在使用不支持<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>
答案 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();