C++中产生随机数种子[转]
(2013-07-02 18:55:46)
标签:
c随机数种子rand |
分类: 工:编程 |
C++中产生随机数种子对于初学者一直都很困惑.大家知道,在C中有专门的 srand(N)函数可以轻松实现这一功能,然而在C++中则要复杂一些.下面是笔者学习的一点心得,希望对大家能有所帮助.(这里我们依然要借助C标准库中的 rand()函数)
应用举例:
1):
srand(time(0)); // 根据系统时间设置随机数种子
int i = rand() % N; // 取得区间[0,N)的整数
1):
srand(time(0));
int i = rand() % N;
如要产生1~10之间 10个随机数,则代码如下:
#include
using namespace
std;
#include
#include
int main()
{
}
2):
srand(time(0)); // 根据系统时间设置随机数种子
float x = rand() * x / RAND_MAX; // 返回1/x的概率
srand(time(0));
float x = rand() * x / RAND_MAX;
3):
srand(time(0)); // 根据系统时间设置随机数种子
vector v; //// 随机访问数组类型, #include
random_shuffle(v.begin(), v.end()); //STL 算法random_shuffle把容器类的元素顺序捣乱
srand(time(0));
vector v;
random_shuffle(v.begin(), v.end());
以下源码来自
问:
1.Knuth的书中是怎么讲的?该书我无缘拜读。
2.static const unsigned long x[55],这里取
3.能否比较全面地讲讲随机数产生的一些算法或理论,或推荐一些参考资料?
[code]
unsigned int Random32(void)
{
static
const unsigned long x[55] = {
1410651636UL,
3012776752UL, 3497475623UL, 2892145026UL, 1571949714UL,
3253082284UL,
3489895018UL, 387949491UL, 2597396737UL, 1981903553UL,
3160251843UL,
129444464UL, 1851443344UL, 4156445905UL, 224604922UL,
1455067070UL,
3953493484UL, 1460937157UL, 2528362617UL, 317430674UL,
3229354360UL,
117491133UL, 832845075UL, 1961600170UL, 1321557429UL,
747750121UL,
545747446UL, 810476036UL, 503334515UL, 4088144633UL,
2824216555UL,
3738252341UL, 3493754131UL, 3672533954UL, 29494241UL,
1180928407UL,
4213624418UL, 33062851UL, 3221315737UL, 1145213552UL,
2957984897UL,
4078668503UL, 2262661702UL, 65478801UL, 2527208841UL,
1960622036UL,
315685891UL, 1196037864UL, 804614524UL, 1421733266UL,
2017105031UL,
3882325900UL, 810735053UL, 384606609UL, 2393861397UL };
static
int init = 1;
static
unsigned long y[55];
static
int j, k;
unsigned
long ul;
if
(init)
{
int
i;
init
= 0;
for
(i = 0; i < 55; i++) y[i] = x[i];
j
= 24 - 1;
k
= 55 - 1;
}
ul
= (y[k] += y[j]);
if
(--j < 0) j = 55 - 1;
if
(--k < 0) k = 55 - 1;
return((unsigned
int)ul);
} [/code]
} [/code]
对于初学者来说,只需熟练掌握1)种用法,更深层次的随着水平的提升自然会有所领悟.
另:
一、C++中不能使用
// C++随机函数(
#include
#include
#include
using namespace std;
#define MAX 100
int main(int argc, char* argv[])
{
}
二、rand()的用法
int N = rand() % 11;
int N = 1 + rand() % 11;
总结来说,可以表示为:
a + rand() % n
此类推。

加载中…