【问题标题】:Generate random number between 0 and 1生成 0 到 1 之间的随机数
【发布时间】:2014-04-11 09:39:05
【问题描述】:

简单的问题,但对我来说很难。我想在0 and 1之间生成均匀分布的随机数,我该怎么做?在 matlab 中我使用 rand,在 C++ rand() 返回整数。

【问题讨论】:

标签: c++ random numbers generator


【解决方案1】:

C++11 起,使用std::uniform_real_distribution

【讨论】:

    【解决方案2】:

    也许你可以使用 RAND_MAX 常量来除随机生成的整数

    【讨论】:

    • 记得把它转换成双精度/浮点数! rand() / (float)RAND_MAX
    • 啊非常快的赶上 :) 使我的答案免于无用
    • 通常需要[0,1)而不是[0,1]范围内的数字,在这种情况下除以(RAND_MAX+1.0)。
    • @pio 注意我说的是+1.0,而不是+1。
    • @pio 无论如何都需要转换为浮点数才能获得 0 到 1 之间的统一,所以这似乎是在 C++ 中完成它的合理位置。
    【解决方案3】:

    这实际上取决于您需要数字的随机性。一般来说,如果我不关心它的随机性,我只会使用 rand 并除以 MAX_RAND(我敢打赌 matlab 的 rand 比 c 的 rand 好)。

    但是,我所做的大部分工作都需要一个比 c 函数 rand 更好的随机数生成器,而且我不需要它在密码学上是安全的。在这种情况下,我使用了一个 mersenne twister 类 (http://www.bedaux.net/mtrand/),它似乎更适合我有时发现自己在做的模拟退火和蒙特卡罗模拟。

    除了这个类,还有一种方法可以得到一个随机的 int32 和一个随机的 double(0 到 1 之间)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-07
      • 1970-01-01
      • 2011-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多