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和自己计算出来的另一部分数据来生成最终的对称密钥,生成过程中需 ...
一周排行
  • 由于上周主要做了项目组产品架构.给公司新员工培训以及其他会议等事情,在OpenExpressApp对建模支持的初步计划中我列了一些建模任务还没有开展,其中参考部分在以前的blog中都已经介绍了(WPF Diagram ...
  • 1.hashcode是用来查找的,如果你学过数据结构就应该知道,在查找和排序这一章有 例如内存中有这样的位置 0 1 2 3 4 5 6 7 而我有个类,这个类有个字段叫ID,我要把这个类存放在以上8个位置之一,如果 ...
  • 回到目录 Redis这个Nosql的存储系统一般会被部署到linux系统中,我们可以把它当成是一个数据服务器,对于并发理大时,我们会使用多台服务器充当Redis服务器,这时,各个Redis之间也是分布式的,而Redi ...
  • 博客:http://lijinhuan.blog.51cto.com/微博:http://weibo.com/lijinhuanexperience代码:https://github.com/lijinhuan有很多 ...
  • /bin/bash: java: command not found 问题解决 在编译android环境时,java -version 命令明明能够正确表示java已经安装成功,环境设置正确.但是,在编译androi ...
  • 搭建内部YUM源服务器IP  192.168.2.135外部YUM源使用要选择支持rsync协议的YUM源rsync://mirrors.ustc.edu.cn/centos/6/* * * */1 * /usr/b ...
  • Centos6.2虚拟机完美克隆后,网卡起不来的问题解析和处理
    一)现状描述    今天个人办公电脑更换好后,也陆陆续续的进行数据拷贝的工作.上午下载好V ...
  • 模拟博客搬家脚本-第一天
    #-------------------------------------------- ...
  • 软件项目进度计划估算探讨
        对软件项目做开发计划也许是最不靠谱的一件事了,由于需求的变动.开发人员的水平以及如 ...
  •    人说30不学艺,我觉得这话说的不全对,只要有兴趣就可以学,和年龄无关.去年公司一个大的项目将使用了10几年的系统全部升级成J2EE架构的了,从原来C++系统换到JAVA,这个变化太大,很多无法适应的老人走了,我 ...