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,则会生成相同的随机数,如:
        for (size_t i = ; i < ; i++)
    {
    srand(time());
    cout << rand() << endl;
    }

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<>生成随机浮点数,并且不用担心精度问题,随机数引擎的使用方法如下:
        default_random_engine e;//定义随机数引擎
    uniform_int_distribution<unsigned> id(, );//整型分布
    uniform_real_distribution<double> dd(, 1.0);//浮点型分布 e.seed();//设置随机数种子
    for (size_t i = ; i < ; i++)
    {
    cout << id(e) << " ; " << dd(e) << endl;
    }

【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. 初始 Kafka Consumer 消费者

    温馨提示:整个 Kafka 专栏基于 kafka-2.2.1 版本. 1.KafkaConsumer 概述 根据 KafkaConsumer 类上的注释上来看 KafkaConsumer 具有如下特征 ...

  2. MySQL插入操作

    说明:value的值可以为数据,DEFAULT,NULL,expr 含有ATUO_INCREMENT的列可以插入DEFAULT.NULL,或者不插入记录来实现自动增长. 插入记录的三种方法:①可以同时 ...

  3. Deferred shading rendering path翻译

    Overview 概述 When using deferred shading, there is no limit on the number of lights that can affect a ...

  4. 网络、TCP协议与UDP协议

    1.网络模型 (1)什么是网络模型 网络编程的本质是两个设备之间的数据交换,当然,在计算机网络中,设备主要指计算机.数据传递本身没有多大的难度,不就是把一个设备中的数据发送给两外一个设备,然后接受另外 ...

  5. Java 中的四种权限修饰符

    * * private: * Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”. * 被其修饰的属性以及方法只能被该类的对象 访问,其子类不能访问,更不能允许跨包访问. * * def ...

  6. cogs 3008. 朋友圈

    3008. 朋友圈 ★★   输入文件:friendscircle.in   输出文件:friendscircle.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] NO ...

  7. 解析Json字符串中的指定的值

    { "head": { ", "Id": "20191008144448iAQE", "Message": & ...

  8. NOIP复活了

    众所周知,NOIP以一种奇葩而又不可避免的方式(CSP)复活了.

  9. 网络通信-基本概念:网络、IP地址、端口、socket

    目录 网络通信 1 网络 1.1 网络定义 1.2 使用网络的目的 1.3 总结 2 IP地址 2.1 ip地址的作用 2.2 ip地址的分类 3 端口 3.1 什么是端口 3.2 端口号 3.3 端 ...

  10. 说实话 NuGet Package Manager 网速不是一般的慢