随机数的一些问题

C标准库中提供了两个用于生成随机数的函数,rand()和srand()。头文件为stdlib.h(cstdlib)。

1、

int rand(void);

返回[0,RAND_MAX]内的一个伪随机数。该数通过一个算法获得,该算法每次返回一个随机数序列,而该序列由种子决定。所以为了产生不同的序列,种子必须不同,而种子的设置将会由srand()函数实现。

2、

void srand(unsigned int seed);

对于不同的种子,多次调用rand()会生成不同的随机数序列。而相同的种子会使得多次调用rand()生成相同的随机数序列。举个例子,

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
	//srand((unsigned int)time(NULL));
	printf("%d,%d",rand(),rand());
	return 0;
}

每当上述程序运行时,输出的结果都一样,因为种子没变(默认为1),所以每次情形多次调用rand()时产生的随机数序列都一样。

所以为了每次产生不同的随机数序列,去掉上述程序中的注释是个好方法。

 

3、一些用法

怎么得到[0,N)之间的伪随机数?

rand()%N;

 

怎么得到[a,b)之间的伪随机数?

rand()%(b-a)+a;

 

怎么取得[0,1]之间的伪随机浮点数?

rand()/(double)RAND_MAX;
posted @ 2012-06-22 22:26  Cavia  阅读(181)  评论(0编辑  收藏  举报