【发布时间】:2014-04-11 09:39:05
【问题描述】:
简单的问题,但对我来说很难。我想在0 and 1之间生成均匀分布的随机数,我该怎么做?在 matlab 中我使用 rand,在 C++ rand() 返回整数。
【问题讨论】:
标签: c++ random numbers generator
简单的问题,但对我来说很难。我想在0 and 1之间生成均匀分布的随机数,我该怎么做?在 matlab 中我使用 rand,在 C++ rand() 返回整数。
【问题讨论】:
标签: c++ random numbers generator
C++11 起,使用std::uniform_real_distribution
【讨论】:
也许你可以使用 RAND_MAX 常量来除随机生成的整数
【讨论】:
rand() / (float)RAND_MAX
[0,1)而不是[0,1]范围内的数字,在这种情况下除以(RAND_MAX+1.0)。
+1.0,而不是+1。
这实际上取决于您需要数字的随机性。一般来说,如果我不关心它的随机性,我只会使用 rand 并除以 MAX_RAND(我敢打赌 matlab 的 rand 比 c 的 rand 好)。
但是,我所做的大部分工作都需要一个比 c 函数 rand 更好的随机数生成器,而且我不需要它在密码学上是安全的。在这种情况下,我使用了一个 mersenne twister 类 (http://www.bedaux.net/mtrand/),它似乎更适合我有时发现自己在做的模拟退火和蒙特卡罗模拟。
除了这个类,还有一种方法可以得到一个随机的 int32 和一个随机的 double(0 到 1 之间)。
【讨论】: