rand()

  • 基本:使用随机数时,经常见到的是C标准库提供的函数rand(),这个函数会生成一个0RAND_MAX之间的一个整形数;
  • 分布:为了得到一个给定范围内的随机数,通常会对生成的随机数取余:rand()%n,rand()%(n-m)+m
  • 种子:通过srand()设置随机数种子,种子不变的情况下,每次程序运行,调用rand(),都会生成相同的随机数序列
  • 浮点:使用double(rand())/RAND_MAX可以生成0-1范围内的随机浮点数,但精度会有问题;
  • 一般情况下,srand()种子可以使用time(0)进行设置,time()取系统的秒,所以如果srand()和rand()的调用间隔小于1s,则会生成相同的随机数,如:
    1. for (size_t i = ; i < ; i++)
    2. {
    3. srand(time());
    4. cout << rand() << endl;
    5. }

C++11 : default_random_engine

  • 基本:C++11提供了新的随机数生成器,随机数引擎default_random_engine,使用时包含头文件#include<random>
  • 范围:默认情况下,default_random_engine的生成范围是一个unsigned,可以通过方法min()和max()获取生成范围;
  • 种子:与rand()类似,default_random_engine也需要通过随机数种子改变生成的序列,设置方法可以通过调用方法seed()
  • 分布和浮点:随机数引擎可以通过分布对象设置生成范围,uniform_int_distribution<unsigned>或uniform_real_distribution<double>
  • 相对rand(),可以使用uniform_real_distribution<>生成随机浮点数,并且不用担心精度问题,随机数引擎的使用方法如下:
    1. default_random_engine e;//定义随机数引擎
    2. uniform_int_distribution<unsigned> id(, );//整型分布
    3. uniform_real_distribution<double> dd(, 1.0);//浮点型分布
    4.  
    5. e.seed();//设置随机数种子
    6. for (size_t i = ; i < ; i++)
    7. {
    8. cout << id(e) << " ; " << dd(e) << endl;
    9. }

【C++】随机数引擎的更多相关文章

  1. C++随机数引擎

    C++的随机数引擎有以下几个要点需要注意:  1.随机数发生器使用同一种子会生成相同序列的随机数序列 2.为了让程序每次运行都会生成不同的随机结果,我们可以使用 time(0) 产生一个随机数种子 3 ...

  2. C/C++基础----随机数分布和随机数引擎

    随机数分布 除了伯努利分布,其他都是模板,接收单个类型参数,指出分布生成的结果类型. 表示分布生成浮点数,float.double或long double 表示要求一个整型类型,不包括bool或任何c ...

  3. C++11--随机数引擎和随机数分布<random>

    /* 随机数引擎: * 有状态的随机数发生器,生成在预定义的最大小值之间的随机数 * 不是真正的随机数--伪随机 */ int main () { std::default_random_engine ...

  4. C++ 11 笔记 (六) : 随机数

    以前生成一个随机数都是这样: srand(time(NULL)); rand(); 在C++11中,标准库中增加了随机数引擎 std::default_random_engine 这个好东西,然后我们 ...

  5. C/C++生成随机数

    一.rand和srand   在C++11标准出来之前,C/C++都依赖于stdlib.h头文件的rand或者srand来生成随机数.   其不是真正的随机数,是一个伪随机数,是根据一个数(我们可以称 ...

  6. C/C++基础----标准库几个工具库tuple,bitset,正则表达式,随机数,IO库

    tuple tuple可以有任意多个成员 默认初始化,值初始化 构造函数是explicit,必须直接初始化 make_tuple(v1,v2,-,vn) get<i> (t) 返回第i个数 ...

  7. c++随机数及rand()的缺陷

    c++生成随机整数和浮点数如下: #include <random> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { ...

  8. C++11 随机数

    C++11带来诸多特性,random就是其一. 随机数由生成器和分布器结合产生 生成器generator:能够产生离散的等可能分布数值(需要种子,不然每次生存的随机数都一样) 分布器distribut ...

  9. C++中随机数的生成

    1.随机数由生成器和分布器结合产生 生成器generator:能够产生离散的等可能分布数值 分布器distributions: 能够把generator产生的均匀分布值映射到其他常见分布,如均匀分布u ...

随机推荐

  1. ArcGIS Server for JavaScript 3.3 的安装部署

    一.安装包下载 首先从官网下载ArcGIS API for JavaScript 3.3 的API和SDK,地址:http://support.esrichina.com.cn/2011/0223/9 ...

  2. 迭代器使用过程中为什么抛出ConcurrentModificationException

    出现的场景:在迭代器对集合进行遍历的同时,集合本身进行变更操作(add(), remove(), set()). 当正常调用时: import java.util.ArrayList; import ...

  3. 代码注释规范-IDEA 配置 Java 类方法注释模板

    1. 引言     团队开发时,业务模块分配的越清晰,代码注释管理越完善,越有利于后面维护,后面再管理也方便不少.另外也起着"文字砖"的作用,你懂的.注释不需要很详细,把代码块方法 ...

  4. feign架构 原理解析

    什么是feign? 来自官网的解释:Feign makes writing java http clients easier 在使用feign之前,我们怎么发送请求? 拿okhttp举例: publi ...

  5. 点分治 (等级排) codeforces 321C

    Now Fox Ciel becomes a commander of Tree Land. Tree Land, like its name said, has n cities connected ...

  6. eclipse反编译插件 jadclipse jad

    eclipse常用反编译插件jadclipse.jad 1.下载jadclipse:net.sf.jadclipse_3.3.0.jar,放到eclipse-plugins 2.下载jad.exe,放 ...

  7. struts2学习第一天

    Stuts2是基于MVC设计模式成熟的Web应用框架.不仅仅是Struts1的下一个版本,是一个全新的Struts架构.由WebWork社区跟Strut社区联手打造的.(教程来自W3Cschool) ...

  8. kubernetes concepts -- Pod Overview

    This page provides an overview of Pod, the smallest deployable object in the Kubernetes object model ...

  9. Docker + node(koa) + nginx + mysql 开发环境搭建

    什么是Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然 ...

  10. python小知识点总结

    小知识点总结 1.python2和python3的区别   python2 python3 默认编码 ascii utf-8 input() raw_input() input() print 可以不 ...