C++中的随机数

在C++中iostream里面封装的就有随机数函数rand()和srand(),它们的作用分别是产生随机数和产生随机数的种子。

函数原型分别如下:

void	 srand(unsigned);
int	 rand(void);

下面就直接根据代码分析:

 #include <iostream>
using namespace std;


int main(int argc, const char * argv[])
{

    // insert code here...
    srand(time(NULL));
    for (int i=0; i<100; i++) {
        
        cout<<rand()<<endl;
    }
   

    return 0;
}

这个是伪随机产生的例子,给产生随机数的函数一个种子,当然种子为系统当前的时间戳,产生如下结果:

1660164204
124751157
748656227
558519416
384803675
1322104608
598851147
1782857787
651499518
1880766620
..........

再运行一次

1707324646

328834108

1239429425

498970075

266408990

32490935

614298207

1556073920

878520274

1340171993

1462196615

1483135684

1218750259

836577927

......................

不用种子的话,会产生如下结果:

#include <iostream>
using namespace std;


int main(int argc, const char * argv[])
{

    // insert code here...
    // srand(time(NULL));
    for (int i=0; i<100; i++) {
        
        cout<<rand()<<endl;
    }
   

    return 0;
}

第一次结果:

16807

282475249

1622650073

984943658

1144108930

470211272

101027544

1457850878

1458777923

2007237709

823564440

......................

第二次结果:

16807

282475249

1622650073

984943658

1144108930

470211272

101027544

1457850878

1458777923

2007237709

823564440

1115438165

1784484492

74243042

......................

竟然是一样的,显然是错误的。

再试一种方式,将srand放在循环里 面

#include <iostream>
using namespace std;


int main(int argc, const char * argv[])
{

    // insert code here...
    
    for (int i=0; i<100; i++) {
        srand(time(NULL));
        cout<<rand()<<endl;
    }
   

    return 0;
}

第一次结果:

1713459201

1713459201

1713459201

1713459201

1713459201

1713459201

1713459201

1713459201

1713459201

1713459201

1713459201

1713459201

1713459201

1713459201

......................

这真不是随机,猜测应该是循环执行的时间太快,每一次rand()函数都要接受一个种子来初始化本身,种子基本上是一样的,随机数的值是一样的。

更多相关文章
  • 李超中的随机数可以从两个特殊的文件中产生,一个是另外一个是.他们产生随机数的原理是利用当前系统的熵池来计算出一定数量的随机比特,然后将这些比特作为字节流返回.熵池就是当前系统的环境噪音,熵指的是一个系统的混乱程度,系统噪音可以通过很多参数来评估,如内存的使用,文件的使用量,不同类型的进程数量等等.如 ...
  • Oracle中生成随机数的函数转载
    在Oracle中的DBMS_RANDOM程序包中封装了一些生成随机数和随机字符串的函数,其中常用的有以下两个: DBMS_RANDOM.VALUE函数 该函数用来产生一个随机数,有两种用法: 1. 产生一个介于0和1之间(不包含0和1)的38位精度的随机数,语法为: DBMS_RANDOM.VALU ...
  • ios 有如下三种随机数方法: 1.    srand((unsigned)time(0));  //不加这句每次产生的随机数不变        int i = rand() % 5;      2.    srandom(time(0));        int i = random() % 5; ...
  • 标签:ul 随机数 c 整数 max 教育  C++中产生随机数种子对于刚開始学习的人一直都非常困惑.大家知道,在C中有专门的srand(N)函数能够轻松实现这一功能,然而在C++中则要复杂一些.以下是笔者学习的一点心得,希望对大家能有所帮助.(这里我们依旧要借助C标准库中的rand()函数)   ...
  • 如何在linux中用命令产生一个范围内的随机数?在shell中有一个环境变量RANDOM,它的范围是0--32767如果我们想要产生0-25范围内的数,如何做呢?如下:$RANDOM%26 用这个环境变量对26取模,就可以得到最小是0,最大是25的数了.如果想得到1--68范围内的数,可以这样$RA ...
  • 相关函数:rand()函数, srand()函数 rand():返回一随机数值, 范围在0至RAND_MAX 间 void srand (unsigned int seed):设置rand()产生随机数时的随机数种子. 示例: #include<stdio.h>;x<;x++); ...
  • C语言中如何产生随机数
        今天看到一段小程序 ,里面用到随机数.才发现在C语言中产生随机数不像matlab中那么简单.     C中也有rand()函数,但是rand()函数产生的数不是真正意义上的随机数,是一个伪随机数,是根据一个数,我们称它为种子,为基准以某个递推公式推算出来的一系列数.范围在0~RAND_MAX ...
  • ssl3_send_client_key_exchange是openssl中客户端确定密钥的函数,同时也发送了“一部分”数据给服务器,这一部分数据就是所谓的pre_master,不管是客户端还是服务器都根据对端传过来的pre_master和自己计算出来的另一部分数据来生成最终的对称密钥,生成过程中需 ...
一周排行
  • 前言:    作为一个合格的运维人员,系统的启动过程我们需要牢记在心,此文不深入探讨,只求大致理解CentOS6的启动过程.一张图带你了解CentOS6的启动过程注意:图片放大查看效果更佳上图各阶段详解POST:计算 ...
  • kvm五客户机vm的增量主机快照
    快速理解快照请参考 虚拟机快照浅析目的:通过一个基础镜像(backing files,基本 ...
  • 联创公司化运作系统课程第八期落地师训练圆满结束转自中小企业规范化管理网 通讯员 小陈2015年10月7日,联创世纪教育训练集团独家首创的公司化运作系统课程第八期落地师训练,经过四天四晚紧张的学习训练,于17日 ...
  • 今天回家使用SSH连接的时候却很慢,大概要等半分钟甚至更久,研究了半天,总结了2个解决方法,如下:这样的问题,最为常见的原因是SSHD会使用DNS查找访问客户端的主机名,如果DNS不可用或者没有相关记录,就会造成延迟 ...
  • 第五步:新建WCF服务站点.在解决方案上右击,选择"添加"->"新建网站",打开新建网站对话框.在"添加新网站"对话框中,我们选择"WCF服 ...
  •          戒烟已经两个多月了,今天早上心里憋的难受,还是买了包烟.        昨晚一夜无眠,想了好多事情,感觉自从我们开始,我从来都没有冷静的静下心来思考,似乎每天都沉浸在无边的思念中,正所谓思念逆流成河 ...
  • 在网上申请一个mageeu.com的域  IP网段为172.16.100.0/24 C类网ns服务器:172.16.100.1www服务器 172.16.100.1  172.16.100.3邮件服务器mail 17 ...
  •    记得刚上大学的那一年,计算机完全是一个熟悉又陌生的东东.(高中的时候光了去读书了,懒得去网吧,当时家乡的小县城也没有多少像样的网吧,而大多去网吧包夜的为一个理由无非是消费自己的时间和缓解自己荷尔蒙的释放.)  ...
  •     很多人认为方法区(或者HotSpot虚拟机中的永久代)是没有垃圾收集的,Java虚拟机规范中确实说过可以不要求虚拟机在方法区实现垃圾手机,而且在方法区进行垃圾收集的"性价比"一般比较低:在 ...
  • 1.使用多条命令如果想将两条命令一起运行,可以将他们输入到同行中,并用分号(;)隔开:[[email protected]~]# data;who bash: data: command not found root   ...