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和自己计算出来的另一部分数据来生成最终的对称密钥,生成过程中需 ...
一周排行
  • C#开源实现MJPEG流传输
    本文为 Dennis Gao 原创技术文章,发表于博客园博客,未经作者本人允许禁止任何形式 ...
  •     最近一直有朋友在问Winxp下文件共享问题,比如如何实现guest用户访问共享,如何保证共享的安全等.其实这已经是一个老话题了,今天闲暇,写一写,有需要的朋友可以作为参考.    环境:工作组,所有计算机允可 ...
  • 记得当年大学时候,java的企业级框架还是ssh的天下(spring,struts和hibernate),但是现在,感觉spring已经完全把那两个框架甩在后边了.用spring的人越来越多,用struts的人比原来 ...
  • 1.主机电源引起的故障 主机电源损坏或主机电源质量不佳引起的黑屏故障很常见.例如,当你添加了一些新设备之后,显示器便出现了黑屏故障,排除了配件质量及兼容性问题之后电源的质量不好动力不足是故障的主要起因,这时你也许还可 ...
  • 使用存储过程实现进销存系统中的先进先出算法2——存储过程调用
            本文是我在前一篇文章提到的关于先进先出存储过程的调用演示.        ...
  • 最近看了一下Freebsd的安装方法有些心得跟大家分享一下对于没有光驱.不想刻盘的人来说硬盘安装无疑是一个天大的喜讯,不过硬盘安装Freebsd稍微一些麻烦不过不用害怕只要按照我说的步骤一步一步走下去一定没问题的!首 ...
  • 全面解析,32位系统4GB内存无法完全识别问题
     因为内存价格的持续走低,哥们近日就直接买了条4GB的内存,道使用.可拿回家一看,原本4G ...
  • 问题如何进行优先级排序?具体故事的优先级,和版本规划的优先级之间有何关系?分析敏捷开发里边有很多地方需要多次进行优先级排序,本文将探讨其不同的应用场景,及其关系.值得注意的一点是,敏捷开发中有无数的“自相似性”,比如 ...
  •  h,j,k,l 移动yy 复制dd 删除p 贴上o,i,a 插入R,r 取代u 回复/ 搜寻:%s/x/y/g 自动取代:w 写入:q 离开:wq! 写入强制离开 /bin:常用系统程式目录/boot:开机设定档, ...
  • 在中国,做网站,很容易,也很难.容易的是,随便找个源代码,采集一堆数据就能搞一个网站出来,或者是看到谁做的好,找个技术人员,三五下的就"仿制"一个出来了.难的是,你要真想做一个靠谱的网站,一个原创 ...