C++中获取随机数


程序段1: 
//包含头文件  
void main() { 
  int count=0; 
  for (int i=0;i <10;i++来自星星的你){ 
  srand((unsigned)time(NULL));  
  count++; 
  cout < < "No " < <count < < "= " < <rand() < < " "; 
  if (!(count%5)) cout < <endl; 
  } 

程序段2: 
//包含头文件  
void main() { 
  int count=0; 
  srand((unsigned)time(NULL)); 
for (int i=0;i <10;i++){ 
  count++; 
  cout < < "No " < <count < < "= " < <rand() < < " "; 
  if (!(count%5)) cout < <endl; 
  } 

程序段1的运行结果为: 
No1=9694 No2=9694 No3=9694 No4=9694 No5=9694 
No6=9694 No7=9694 No8=9694 No9=9694 No10=9694 
程序段2的运行结果为: 
No1=10351 No2=444 No3=11351 No4=3074 No5=21497 
No6=30426 No7=6246 No8=24614 No9=22089 No10=21498  
可以收现,以上两个程序段由于随机数生成时选择的种子的不同,运行的结果也不一样。rand()函数返回随机数序列中的下一个数(实际上是一个伪随机数序列,序列中的每一个数是由对其前面的数字进行复杂变换得到的)。为了模仿真正的随机性,首先要调用srand()函数给序列设置一个种子。为了更好地满足随机性,运用了时间函数time(),以便取到一个随时间变化的值,使每次运行rand()函数时从srand()函数所得到的种子值不沟通。伪随机数生成器将作为 "种子 "的数当作初始整数传给函数。这粒种子会使这个球(生成伪随机数)一直滚下去。 
程序段1中由于将srand()函数放在循环体内,而程序执行的CPU时间较快,调用time函数获取的时间精度却较低(55ms),这样循环体内每次产生随机数用到的种子数都是一样的,因此产生的随机数也是一样的。而程序段2中第1次产生的随机数要用到随机种子,以后的每次产生随机数都是利用递推关系得到的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值