【发布时间】:2011-09-16 22:18:21
【问题描述】:
我将如何快速和安全地*确定0(包括)到r(不包括)范围内的随机数?
换句话说,拒绝抽样的优化版本:
u32 myrand(u32 x)
{
u32 ret = rand();
while(ret >= x)
ret = rand();
return(ret);
}
*安全,我的意思是均匀分布。
【问题讨论】:
-
这个之前已经讨论过,有一些很好的答案,但是我找不到链接ATM。我确实记得(1)有一个网页详细批评了处理这个问题的常用方法,给出了“正确”的方法,(2)有一个强大的标准库(tr1、boost 或 C+ +0x) 来处理各种随机数分布,使用一个不错的(基于 Mersenne Twistor 的?)生成器。
-
@steve314:您可以制作 Boost、TR1 和 C++0x。他们都有
uniform_int -
已找到链接 - stackoverflow.com/questions/4195958/random-number-from-0-to-100 - 请参阅 Konrad Rudolph 和 Blastfurnace 的回答。
-
-1
rand()通常与加密安全相去甚远,以至于使分布更加统一并没有那么有用。 -
@tc
rand()是一个示例函数,它清楚地显示了意图。你宁愿我写BlumBlumShub()来迷惑大家吗?此外,这不是 -1 的理由。
标签: c++ algorithm random sampling