std::default_random_engine 生成介于 0.0 和 1.0 之间的值

新手上路,请多包涵

我希望能够生成 0.0 到 1.0 之间的随机值

我试过用

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

float myrand = distribution(generator);

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

 0.000022

0.085032

0.601353

0.891611

0.967956

0.189690

0.514976

0.398008

0.262906

0.743512

0.089548

我该怎么做才能真正获得随机值?如果我总是得到相同的,似乎并不那么随机。

原文由 user1185305 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 853
1 个回答

将上面的好解决方案修改为一个类,以避免分发和生成器的不断实例化。

 #include <random>

using namespace std;

class RangeRandGenerator {
    uniform_real_distribution<double> dist;
    random_device rd;
    default_random_engine gen;
public:
    RangeRandGenerator( double from, double to ) :
        dist(from, to), gen(rd()) {}

    double get() {
        return dist(gen);
    }
};

原文由 larboyer 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题