std :: default_random_engine generato值介于0.0和1.0之间 [英] std::default_random_engine generato values betwen 0.0 and 1.0

查看:859
本文介绍了std :: default_random_engine generato值介于0.0和1.0之间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想能够在0.0和1.0之间生成随机值

I want to be able to generate random values between 0.0 and 1.0

我试图使用

std::default_random_engine generator;
std::uniform_real_distribution<float> distribution(0.0, 1.0);

float myrand = distribution(generator);

在循环中生成随机值给我总是这些值:

Generating random value in a loop gives me always these values:

0.000022

0.085032

0.601353

0.891611

0.967956

0.189690

0.514976

0.398008

0.262906

0.743512

0.089548

我能做什么才能真正获得随机值?

What can I do to really get random values? Doesn't seem that random if I always get the same ones.

推荐答案

// 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:   



如果使用相同的随机数生成器打开乘法程序, >
它们将输出相同的结果,因为它们具有相同的种子值,这是时间。

通过使用随机设备解决了这个问题,见以下描述:* /

if open multiply programs which use the same random number generator
they will output the same results, because they have the same value of seed which is time.
This issue solved by using random device, see description beyond:*/

// 2-nd variant: 
std::uniform_real_distribution<double> distribution(first, last);
 std::random_device rd;
 std::default_random_engine generator( rd() );
 return distribution(generator);

这篇关于std :: default_random_engine generato值介于0.0和1.0之间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆