随机数生成

计算机生成随机数的方法是线性同余法,通过特定的算法生成一系列毫无规则的数字,让用户看起来好象是随机数,但本质上是伪随机数。

示例一:

#include <iostream>
#include <cstdlib>
using namespace std;
int main(int argc, char** argv) {
	cout<<"本机的最大随机数为:"<<RAND_MAX<<endl;
	for(int i=0;i<5;++i)
	{
		cout<<rand()<<endl;
	}
	return 0;
}
RAND_MAX表示本机的最大随机整数,不同机器可能不同。然后用一个for循环生成五个随机数,如下所示:

但是,示例一有一个问题,就是每一次程序运行产生的随机数都是一样的,原因就是C++标准库在编写rand函数的时候采用的是线性同余法,算法一样的情况下结果自然相同。为了使每一次运行的结果都产生不一样的随机数,需要借用“随机种子”这一概念,如示例二所示。

示例二:

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main(int argc, char** argv) {
	cout<<"本机的最大随机数为:"<<RAND_MAX<<endl;  //输出本机最大的随机数 
	srand((int) time(NULL)); //随机种子,只能在第一次调用rand()函数之前使用一次 ,NULL是个宏定义的值,就是0
	for(int i=0;i<5;++i)
	{
		cout<<rand()<<endl;
	}
	return 0;
}
两次不同时间的运行结果如下:

加上随机种子之后,程序生成的结果就不一样了。srand()函数每个程序只能使用一次,在第一次调用rand()函数之前使用,以获取当前时间(时间总是不一样的),它是通过时间来使得每一次产生的随机数都各不相同。如给srand()函数传递的参数是一个定值,比如srand(5),则多次运行程序后产生的随机数序列也是相同的。原因在于种子相同,产生的随机数也是相同的,因此想要什么类型的随机数序列,就应该仔细研究随机种子的取值规律。示例二中给srand()函数传递的参数为time(0)的返回值,它的功能是返回系统当前的时间。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值