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和自己计算出来的另一部分数据来生成最终的对称密钥,生成过程中需 ...
一周排行
  • 实验二、DNS配置中级
    拓扑:主要内容:1. DNS基础配置:在第一台DNS服务器上,配置DNS区域ahgf.co ...
  • 华为路由系统平平台VRP5.50支持静态路由和RIP.OSPF.IS-IS.BGP等动态路由.1.静态路由:优点:配置方便.系统要求低缺点:不能自动适应网络拓扑变化应用:拓扑结构简单.小型网络 2.动态路由:根据三种 ...
  • 红黑树:publicclass RBTree {      privatefinal Node NIL = new Node(null,null,null,Color.BLACK,-1);      private  ...
  • MongoDB的replication配置比MySQL简单,而且感觉更智能一些.配置非常简单,先简单介绍一下环境:Primary 一台Secondary 一台Arbiter 一台分别三台机器,通过一个10.10.1. ...
  • 今天在做项目的时候,来了个奇怪的异常,具体异常如下: Java代码 java.lang.LinkageError: loader constraint violation:      google了一会发现原来是jb ...
  • 部署SSH免密钥登录
    SSH免密钥登录很简单,只需三四步就能部署完成.测试环境:CentOS 6.6 步骤如下: ...
  • 介绍一个比较好用的命令,以前经常用,今天突然看到以前写的文档,就把这个拿出来分享一下,大家都知道windows server服务器经常会卡死,导致远程连接不上,但是又能ping通,然后我就试着从在同一个vlan的计算 ...
  •         首先说明操作符重载不是CLR的特性,或者说CLR对此一无所知,它由各自的语言来规范.         写这个主要是因为一个特殊的类令我对称产生了好奇,这个类就是String.        Strin ...
  • Combiner作用的地方:1.从缓存溢写到磁盘,减少溢写到磁盘的2.多个溢写文件合并(merge)时hadoop的心脏–shuffle过程解析:http://blog.yfteach.com/?p=283
  • 要求实现: Vector 多字段排序,其中首元素不参与排序,第一二三字段升序,空排到前面. //这里是Vector的元素定义 public class AVectorElement { private String ...