C++中获取随机数

         本人近期在做项目在线版本的C/S部署,在服务器端需要传送文件,系统要求文件名字唯一。我的实现方法是随机数+时间+客户IP。其中时间格式的“:”需要替换,否则windows系统认为不合理。对于随机数的产生我的理解一直停滞于20年前谭浩强的<<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次产生的随机数要用到随机种子,以后的每次产生随机数都是利用递推关系得到的。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值