背景

考试想造浮点数然后发现不会

正好下午被虎哥茶话会

谈到了一些不会的问题balabala的

被告知\(C++11\)有些神奇特性(哦豁)

然后就学习了一手看上去没什么用的随机数生成器\(QwQ\)

random_device

标准库提供了一个非确定性随机数生成设备

在\(Linux\)的实现中,是读取\(/dev/urandom\)设备

random_device提供()操作符,用来返回一个min()到max()之间的一个数字

如果是\(Linux(Unix Like或者Unix)\)下,都可以使用这个来产生高质量的随机数,可以理解为真随机数

(以上都是废话,其实和最原始的c++的rand()用法一样,不过真随机数好评)

#include <iostream>
#include <random>
using namespace std;
signed main(){
random_device rand;
cout << rand() << endl;
return 0;
}

default_random_engine

一个随机化的前置引擎

给后面要用到的函数生成一个随机节点(时间戳balabala随便理解一下就好,并没有什么卵用,就是让后面的函数随机化更强)

和上面提到的\(random_device\)不同的是,这个需要提供时间种子,看上去和rand也没什么区别。。。

#include <iostream>
#include <random>
using namespace std;
signed main(){
default_random_engine rand(time(NULL));
cout << rand() << endl;
return 0;
}

uniform_int_distribution

好了干货来了

该函数的作用是生成一个[a,b]范围内的整数

定义的时候传进去相应的参数(数据范围即可)

uniform_int_distribution<int> rand1(-100, 100);

调用的时候给时间种子(就是上面device写的rand函数)

cout << rand1(rand) << " ";

uniform_real_distribution

最有用的东西还是这个实数域的随机生成器

用法和上述int一样

uniform_real_distribution<double> rand2(0.0, 1.0);
cout << rand2(rand) << endl;

正态分布normal_distribution

再来说一个常用的

正态分布

正态分布\(N(μ,σ^2)\)呈现经典的”钟形曲线”的形状,其中中心峰的\(x\)坐标由\(μ\)给出,峰的宽度受\(σ\)控制。

正态分布由两个参数控制,\(μ∈R\)和\(σ∈(0,∞)\)

分布的标准差用\(σ\)表示,方差用\(σ^2\)表示

使用方法,第一个参数是\(μ\),第二个是\(σ\)

normal_distribution<double> N(10.0, 5.0);

为了方便直观的看出数据分布,把每次生成的数据出现次数+1,测试的时候输出了数据分布图像

for(register int i = 0; i < 10000; i++){
double num = nor(rand);
if ((num >= 0.0) && (num < 20.0)) ++p[int(num)];
}
for (int i = 0; i < 20; ++i) {
cout << i << "-" << (i + 1) << ": ";
cout << string(p[i] * 100 / 10000, '*') << endl;
}



具体要求按照具体题目要求,修改参数即可

Code

最后把代码粘贴一下,有需要自取就好

#include <iostream>
#include <random>
using namespace std; int p[1000]; signed main(){
default_random_engine rand(time(NULL)); uniform_int_distribution<int> rand1(-100, 100);
uniform_real_distribution<double> rand2(0.0, 1.0);
cout << rand() << " ";
cout << rand1(rand) << " ";
cout << rand2(rand) << endl; normal_distribution<double> nor(10.0, 5.0);
for(register int i = 0; i < 10000; i++){
double num = nor(rand);
if ((num >= 0.0) && (num < 20.0)) ++p[int(num)];
}
for (int i = 0; i < 20; ++i) {
cout << i << "-" << (i + 1) << ": ";
cout << std::string(p[i] * 100 / 10000, '*') << std::endl;
}
return 0;
}

小结

目前常用的这些吧

如果后续再有需求再补充v吧

C++11 随机数生成器的更多相关文章

  1. BZOJ-2875 随机数生成器 矩阵乘法快速幂+快速乘

    题目没给全,吃X了... 2875: [Noi2012]随机数生成器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1479 Solved: 829 ...

  2. [BZOJ3671][UOJ#6][NOI2014]随机数生成器

    [BZOJ3671][UOJ#6][NOI2014]随机数生成器 试题描述 小H最近在研究随机算法.随机算法往往需要通过调用随机数生成函数(例如Pascal中的random和C/C++中的rand)来 ...

  3. NOI2014 随机数生成器

    随机数生成器 [问题描述] 小H最近在研究随机算法.随机算法往往需要通过调用随机数生成函数(例如Pascal中的random和C/C++中的rand)来获得随机性.事实上,随机数生成函数也并不是真正的 ...

  4. Linux下对拍脚本与随机数生成器

    对拍脚本 新建一个文档 check.sh 作为对拍脚本. #!/bin/bash while(true)do #死循环 ./data > .in #运行数据生成器,将数据输出到1.in ./st ...

  5. 矩阵(快速幂):COGS 963. [NOI2012] 随机数生成器

    963. [NOI2012] 随机数生成器 ★★   输入文件:randoma.in   输出文件:randoma.out   简单对比 时间限制:1 s   内存限制:128 MB [问题描述] 栋 ...

  6. BZOJ 2875: [Noi2012]随机数生成器( 矩阵快速幂 )

    矩阵快速幂...+快速乘就OK了 ----------------------------------------------------------------------------------- ...

  7. Swift - 产生不重复数字的随机数生成器

    在Swift中,可以使用函数类型的参数,也可以使用函数类型的返回值.而作为返回值的函数,还能“捕获”外部的值,并多次使用它.这个特性,常可用来创建各种生成器. 下面通过创建一个“随机数生成器函数”作为 ...

  8. 【矩阵乘】【NOI 2012】【cogs963】随机数生成器

    963. [NOI2012] 随机数生成器 ★★ 输入文件:randoma.in 输出文件:randoma.out 简单对照 时间限制:1 s 内存限制:128 MB **[问题描写叙述] 栋栋近期迷 ...

  9. 【BZOJ2875】随机数生成器(矩阵快速幂)

    [BZOJ2875]随机数生成器(矩阵快速幂) 题面 Description 栋栋最近迷上了随机算法,而随机数是生成随机算法的基础.栋栋准备使用线性同余法(Linear Congruential Me ...

随机推荐

  1. Mockito鸡尾酒第一杯 单测Mock

    鸡尾酒 Mockito是Java的单元测试Mock框架. 它的logo是一杯古巴最著名的鸡尾酒Mojito, Mojito鸡尾酒,源自古巴的哈瓦那,带有浓厚的加勒比海风情. 并不浓烈,但是喝一杯下去, ...

  2. Spring Boot 集成 Memcached

    Memcached 介绍 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站 ...

  3. First-Spike-Based Visual Categorization Using Reward-Modulated STDP

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Abstract 强化学习(RL)最近以击败欧洲围棋冠军等重大成就重新受到欢迎.在这里,我们第一次表明,RL可以有效地用于训练一个脉冲神经 ...

  4. 怎么给Ubuntu Server安装GUI桌面

    sudo apt update sudo apt upgrade sudo add-apt-repository universe sudo add-apt-repository multiverse ...

  5. Kafka 0.10.1版本源码 Idea编译

    Kafka 0.10.1版本源码 Idea编译 1.环境准备 Jdk 1.8 Scala 2.11.12:下载scala-2.11.12.msi并配置环境变量 Gradle 5.6.4: 下载Grad ...

  6. 08.简单学习redis哨兵主备切换和选举算法

    一.选举的授权 每次一个哨兵要做主备切换,首先需要quorum数量的哨兵认为odown,然后选举出一个哨兵来做切换,这个哨兵还得得到majority哨兵的授权,才能正式执行切换 如果quorum &l ...

  7. Scrapy命令行调用传入自定义参数

    在做爬虫服务化时,有这样一个需求:接口用命令行启动爬虫,但是数据入库时要记录此次任务的task_id. 简单说就是,Scrapy命令行启动时要动态传参进去. 解决方案: 在spider中定义一个构造函 ...

  8. Flutter —布局系统概述

    老孟导读:此篇文章非常详细的讲解了 Flutter 布局系统的工作原理. 翻译自:https://itnext.io/flutter-layout-system-overview-c70bbe9ba9 ...

  9. tars 问题汇总

    1. 节点 ip地址变了如何解决.后台不可以改. 2. [ok] 服务如何在本地运行../HelloGo --config.conf

  10. SplashImage

    关于Unity启动时间过长(启动黑屏时间长)的问题 https://blog.csdn.net/h5q8n2e7/article/details/50484458 Unity3D游戏开发之“重写Uni ...