我希望能够生成介于0.0和1.0之间的随机值
我试过用
std::default_random_engine generator;
std::uniform_real_distribution<float> distribution(0.0, 1.0);
float myrand = distribution(generator);
Run Code Online (Sandbox Code Playgroud)
在循环中生成随机值总是给我这些值:
0.000022
0.085032
0.601353
0.891611
0.967956
0.189690
0.514976
0.398008
0.262906
0.743512
0.089548
Run Code Online (Sandbox Code Playgroud)
我能做些什么来真正获得随机值?如果我总是得到相同的,那似乎不是随机的.
spi*_*ght 13
// 1-st variant: using time() function for seed random distribution
std::default_random_engine generator(time(0));
std::uniform_real_distribution<double> distribution(first, last);
return distribution(generator);
/*disadvantages:
Run Code Online (Sandbox Code Playgroud)
如果使用相同随机数生成器的open multiply程序,
它们将输出相同的结果,因为它们具有相同的种子值,即时间.
使用随机设备解决了这个问题,请参阅以下说明:*/
// 2-nd variant:
std::uniform_real_distribution<double> distribution(first, last);
std::random_device rd;
std::default_random_engine generator( rd() );
return distribution(generator);
Run Code Online (Sandbox Code Playgroud)
如果您指的是每次执行程序都得到相同的结果,那是因为您需要根据一些自然随机的值(例如,用户输入的某个数字,或者自那以后经过的毫秒数)提供种子计算机已打开,或自1970年1月1日起等):
#include <random>
std::default_random_engine generator;
generator.seed( /* ... */ );
// ^^^^^^^^^
// Provide some naturally random value here
std::uniform_real_distribution<float> distribution(0.0, 1.0);
float myrand = distribution(generator);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25125 次 |
| 最近记录: |