Cro*_*oCo 4 random visual-studio-2010 c++11
我正在使用不支持的visual studio 2010 <chrono>
,所以我必须播种default_random_engine
.因此,我决定将其播种rand
如下
srand((unsigned int)time(NULL));
std::default_random_engine engine(rand());
std::normal_distribution<double> randn(0.0, 0.3);
Run Code Online (Sandbox Code Playgroud)
而不是以下
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);
Run Code Online (Sandbox Code Playgroud)
我得到了我期望为这两种方法获得的东西.我的问题是,我应该注意使用rand()吗?(注意:我别无选择<chrono>
Cas*_*sey 16
我建议抓一个种子std::random_device
:
std::default_random_engine engine(std::random_device{}());
Run Code Online (Sandbox Code Playgroud)
这应该为你提供明显更多的熵std::time
.
根据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();
Run Code Online (Sandbox Code Playgroud)