C++98以及C++11产生随机数的方法

news2024/11/22 18:05:06

目录

  • 引言
    • 1、C++98标准实现随机数
    • 2、C++11新标准随机数引擎

引言

  在C++11出现之前,C++98使用随机数采用的是C标准库的写法。而在C++11出现后,我们生成随机数可以采用更为现代化的方式。

1、C++98标准实现随机数

  以往生成随机数使用的是cstdlib.h库中的rand()函数,由于我们需要根据不同时间生成不同的随机数,因此还需要引入ctime.h库。需要注意的是这里实现的都是伪随机数

  rand()的最大值和声明的变量有关,若为16位编译器,则int 为 16位,含有2字节。去掉一个符号位,最大值是2^15-1=32767。

  默认随机数种子是0,因此如果采用默认方法时,每次生成的随机数是一致的,这时便于应用程序的调试。

#include<cstdlib.h>
#include<ctime.h>

float Rand = rand(); //每次产生一样的随机数

  每次产生不同的随机数引入ctime.h:

#include<cstdlib.h>
#include<ctime.h>

srand((int) time(0));
float Rand = rand(); //每一时刻产生的随机数不相同

  需要产生某一范围内的随机数:

rand()%(b-a) + a

  来产生[a,b)内的数值。

  比如[0,100)则可以使用

rand() % 100

  公式rand()%(b-a),是求范围随机数的计算公式,%是做求余运算,正整数对n求余的范围肯定是在0~n-1之间,也就是rand()%(b-a)的范围是0~b-a-1,然后加上a,也就是范围变成了a~b-1。

rand()%90+10=rand()%100-10+10

  需要浮点型数在0~1内,使用

rand()/(double)RAND_MAX;

2、C++11新标准随机数引擎

  因为之前C、C++依赖的C标准库rand()方法存在问题,C++11引入了新的随机数库random.h。

  它可以通过随机数引擎类(random_number_engines)生成随机数序列,也可以通过随机数分布类(random-number distribution)使用随机数引擎生成 服从特地概率分布的随机数。这里的随机数引擎是函数对象,所以需要调用才能生成随机数。

#include <iostream>
#include <random>
using namespace std;

int main()
{
	default_random_engine e;
	cout << e() << endl;
	cout << e.min() << endl;
	cout << e.max() << endl;

}

  声明随机数类后会达到像上面rand()一样的效果,也是一个保持不变的随机数。

  可以看到范围大小为0~4294967295。生成的是不带符号的32位整数。
在这里插入图片描述
  若生成不同的随机数:

#include <iostream>
#include <random>
using namespace std;
int main()
{
	default_random_engine e(10);
	for (auto t = 0;t < 3;t++)
	{
		cout << e() << endl;
	}
	cout << e.min() << endl;
	cout << e.max() << endl;
}

  每次调用e()都会生成不同的随机数。

  设置范围相比rand()要使用数学方法计算简单很多,声明一个随机数分布类,然后将随机数引擎作为参数传递。

#include <iostream>
#include <random>
using namespace std;

int main()
{
	default_random_engine e(10);
	uniform_int_distribution<unsigned> u(0, 9); //随机数分布对象 
	for (auto t = 0;t < 3;t++)
	{
		cout << u(e) << endl;
	}
	cout << e.min() << endl;
	cout << e.max() << endl;
}

在这里插入图片描述
  如果要生成小数的话,只需要修改随机数分布类uniform_int_distribution<unsigned>uniform_real_distribution<double>

#include <iostream>
#include <random>
using namespace std;
int main()
{
	default_random_engine e(10);
	uniform_real_distribution<double>  u(0, 9); //随机数分布对象 
	for (auto t = 0;t < 3;t++)
	{
		cout << u(e) << endl;
	}
	cout << e.min() << endl;
	cout << e.max() << endl;
}

在这里插入图片描述
  同时还有正态分布类normal_distribution<> ,感兴趣大家可以自行了解,这里就不叙述了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/189439.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Node.js的3DTiles三维倾斜摄影模型爬虫

随着小型无人机的普及,乡村级的倾斜摄影模型构建已经越来越简单。一个无人机和一名飞手2个小时内就可以完成。在做WebGIS和Cesium开发时,3DTiles是一种常用的倾斜摄影三维模型的切片格式。3DTiles格式通常有散列和紧凑两种文件组织形式,其中不同工具生成的散列数据使用的索引…

【GNN报告】GNN-LOGS部分报告汇总

Bastain Rieck: Topology-Based Graph Representation Learning 基础 拓扑学习 基于拓扑学习的工作 参考 Bastain Rieck: Topology-Based Graph Representation Learning_哔哩哔哩_bilibili Chaitanya K. Joshi Graph Neural Networks for Geometric Graphs 背景 方法 Geom…

Kenney Assets - 提供数以万计免费商用的游戏制作素材下载,包括 2d、3d素材,游戏音效和游戏 UI

来自荷兰的游戏公司开放了自家游戏的素材包&#xff0c;制作很精美&#xff0c;下载后无需取得授权就能直接商用。 关于 Kenney Assets Kenney Assets 是游戏公司 Kenney 为游戏开发者提供的游戏素材资源网站&#xff0c;主要包括游戏 2D / 3D 人物和场景素材&#xff0c;游戏…

AXI 总线协议学习笔记(1)

引言 此文针对 XILINX的用户指南 UG761进行学习简单对AXI作说明。从下篇文章开始&#xff0c;通过阅读ARM官网的AXI协议标准进行系统学习。可以持续关注~ AXI是什么&#xff1f; AXI是ARM AMBA的一部分&#xff0c;ARM AMBA是1996年首次引入的一系列微控制器总线。 AXI的第…

ORA-29740:evicted by member %d, group incarnation %d

这个错误是在 rac 底下出现的&#xff0c;应该算是个比较严重的错误&#xff0c;就是 某个节点 被 踢&#xff08;evict&#xff09;出去了&#xff0c;导致这个节点重启系统。 这个错误的原因多种多样&#xff0c;而且需要找的日志文件也是很多的&#xff0c;基本上&#xff…

Serverless-云原生服务-概念

云原生服务是包含硬件、架构&#xff0c;硬件&#xff0c;因云而生&#xff0c;所以称为云原生技术。ServerlessFaasBaas同时具有按量付费和弹性伸缩的特点&#xff0c;该架构包括了函数维度和应用维度的两种形态关键字解析BaaS&#xff1a;Backend as a Service&#xff08;后…

termux 部署springboot 及mysql

安装应用后&#xff0c;首先在手机上运行 pkg install openssh 再运行 passwd&#xff0c;改变ssh的密码。这时在pc上用数据线连好手机&#xff0c;打开adb调试&#xff0c;将手机的端口8022映射到PC上&#xff0c;因为termux中ssh默认是8022&#xff0c;再运行一下sshd 运行…

CV-Model【8】:ConvNeXt

文章目录前言1. Abstract & Introduction1.1. Abstract1.2. Introduction2. Modernizing a ConvNet: a Roadmap2.1. Training Techniques2.2. Macro Design2.2.1. Stage ratio2.2.2. "patchif" stem2.3. ResNeXt-ify2.4. Inverted Bottleneck2.5. Large Kernel S…

AWK简单总结

目录AWK简单总结常用命令选项变量内置变量自定义变量printf命令格式AWK简单总结 awk是linux/unix下的一个强大编程工具,他支持用户自定义函数和动态正则表达式&#xff0c;灵活性强&#xff0c;运行速度快。 常用命令选项 -F fs&#xff1a;fs指定输入分隔符&#xff0c;fs可…

利用SMB协议实现局域网内设备文件的共享

文章目录参考资料说明步骤1&#xff1a;[windows]开启SMB协议步骤2&#xff1a;[windows]创建新的用户账号步骤3&#xff1a;[windows]共享文件夹属性-共享-共享属性-共享-高级共享步骤4&#xff1a;[windows]查看共享文件的主机在局域网内的IP地址步骤5&#xff1a;[ipad]打开…

华为机试题:HJ35 蛇形矩阵(python)

文章目录知识点详解1、input()&#xff1a;获取控制台&#xff08;任意形式&#xff09;的输入。输出均为字符串类型。1.1、input()与list(input())的区别、及其相互转换方法2、print() &#xff1a;打印输出。3、算术运算符4、整型int() &#xff1a;将字符串或数字转换为整型…

π122M31 双通道数字隔离器 CAN通信隔离兼容ADuM7241ARZ

π122M31 双通道数字隔离器 CAN通信隔离兼容ADuM7241ARZ电路简单、稳定性更高&#xff0c;具有出色的性能特征和可靠性&#xff0c;整体性能优于光耦和基于其他原理的数字隔离器产品。 产品传输通道间彼此独立&#xff0c;可实现多种传输方向的配置&#xff0c;可实现 5.0kVrms…

excel软件应用:如何妙用Word拆分单元格数据

打仗亲兄弟&#xff0c;上阵父子兵&#xff01;Word和Excel就是一对好兄弟&#xff0c;虽然各有分工&#xff0c;但有时也能彼此帮忙。Excel中的莫名其妙问题找Word帮忙解决&#xff0c;往往有效。譬如从平台中导出的数据&#xff0c;先使用Word做一次符号处理再粘贴到Excel中处…

Go语言基础入门第五章

string 什么是stringGo中的字符串是一个字节的切片&#xff0c;可以通过将其内容封装在""中来创建字符串&#xff0c;Go中的字符串是 Unicode 兼容的&#xff0c;并且是 UTF-8 编码。 字符串是一些字节的集合。 package mainimport "fmt"func main() {st…

白盒测试用例设计-笔记

白盒测试用例设计方法白盒设计方法静态&#xff1a;桌面检查、代码审查、代码走查、代码扫描工具动态&#xff1a;逻辑覆盖法&#xff1a;语句覆盖、判断覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖基本路径测试法逻辑覆盖法&#xff1a;是通过对程序逻辑结构的遍历…

97. BERT微调、自然语言推理数据集以及代码实现

1. 微调BERT 2. 句子分类 3. 命名实体识别 4. 问题回答 5. 总结 即使下游任务各有不同&#xff0c;使用BERT微调时只需要增加输出层但根据任务的不同&#xff0c;输入的表示&#xff0c;和使用的BERT特征也会不一样 6. 自然语言推理数据集 斯坦福自然语言推断语料库&#xf…

BP神经网络算法实现

目录 一、实验数学原理 二、实验算法和实验步骤 三、结果分析 1. 均方误差变化的影响 2. 迭代次数变化的影响 3. 学习效率变化的影响 四、预测 一、实验数学原理 激活函数&#xff1a; 一般使用S形函数&#xff08;即sigmoid函数&#xff09;&#xff0c;比如可以使用log-…

【爬虫系列】Python如何实现进度条效果?

一、需求 在爬取数据过程中&#xff0c;发现不看输出日志是不知道当前的爬取进度&#xff0c;而单纯靠控制台输出日志信息也不方便判断。因此&#xff0c;就想办法给爬取过程加个进度条&#xff0c;实时展示当前的爬取进度。 有了这个需求和想法之后&#xff0c;那如何实现呢…

k8s中不同名称空间下的pod无法解析服务名

1、背景 公司的项目需要使用容器化部署&#xff0c;为了更好的维护和管理&#xff0c;我将各个项目按照命名空间进行隔离开&#xff0c;但是却发现存在一些问题 不同的系统间需要项目调用&#xff0c;而且是按照服务名进行调用&#xff0c;但是却导致不同名称空间下pod无法解析…