C语言生成随机数、C++11按分布生成随机数学习

news2025/1/10 10:34:03

C语言生成随机数

如果只要产生随机数而不需要设定范围的话,只要用rand()就可以;rand()会返回一随机数值, 范围在0至RAND_MAX 间;RAND_MAX定义在stdlib.h, 其值为2147483647;

如果想要获取在一定范围内的数的话,直接做相应的除法取余即可;

如何获取小数呢?例如,我们可以先获得10001以内的整数(0~10000),然后再用这个整数除以10000得到小数点后两位的小数;

通过多次运行发现,如果只使用rand(),生成了10个随机数,这10个随机数是固定的;

这与srand()函数有关;srand()用来设置rand()产生随机数时的随机数种子;在调用rand()函数产生随机数前,可以先利用srand()设好随机数种子(seed), 如果未设随机数种子, rand()在调用时会自动设随机数种子为1;

srand()函数定义 : void srand (unsigned int seed);

通常可以利用geypid()或time(0)的返回值来当做seed;

如果你用time(0)的话,要加入头文件#include<ctime>;

time(0)或者time(NULL)返回的是系统的时间(从1970.1.1午夜算起),单位:秒;

VC6中看一下;

void CRandtestView::OnDraw(CDC* pDC)
{
	CRandtestDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	CString str1;
	int row=0;
	int i=0;

	for(i=0;i<10;i++)
	{
		str1.Format("%d", rand());
		pDC->TextOut(50, 50+row*20, str1);
		row=row+1;
	}

	row = 0;
	for(i=0;i<10;i++)
	{
		str1.Format("%d", rand() % 10);
		pDC->TextOut(150, 50+row*20, str1);
		row=row+1;
	}

	row = 0;
	for(i=0;i<10;i++)
	{
		str1.Format("%d", rand() % 100);
		pDC->TextOut(250, 50+row*20, str1);
		row=row+1;
	}

	row = 11;
	for(i=0;i<10;i++)
	{
		str1.Format("%f", (rand()%10001)/10000.0);
		pDC->TextOut(50, 50+row*20, str1);
		row=row+1;
	}

	row = 11;
	srand(time(0));
	for(i=0;i<10;i++)
	{
		str1.Format("%d", rand()%10);
		pDC->TextOut(150, 50+row*20, str1);
		row=row+1;
	}
}

C++ 11 生成随机数

在 C++ 11 标准中,定义在头文件 random 中的随机数库通过一组协作的类,可以用更少的编程来实现更强的功能;

主要包括2个类;
    随机数引擎类(random-number engines)
    随机数分布类(random-number distribution)
其中,一个引擎类可以生成 unsigned 随机数列,一个分布使用一个引擎类生成指定类型的,在给定范围内的,服从指定概率分布的随机数。

随机数引擎是函数对象类,他们定义了一个调用运算符,该运算符不接受参数并返回一个随机的 unsigned 整数;我们可以通过调用一个随机数引擎对象来生成原始随机数;
类似引擎类型,分布类型也是函数对象类;分布类型定义了一个调用运算符,它接受一个随机数引擎作为参数;分布对象使用它的引擎参数生成随机数,并将其映射到指定的分布;

C++ 11 可以生成 20 种不同的分布类型,比如 均匀分布uniform,正态分布normal,二项分布binomial,泊松分布poisson,学生分布 student 等;
 

#include <iostream>
#include <random>
#include <ctime>

using namespace std;

int main()
{
	default_random_engine e;
	
	uniform_int_distribution<unsigned> u(0,9);
	for(int i = 0; i < 10; i++)
		cout << u(e) << endl;
		
	uniform_real_distribution<double> u2(0,9);
	for(int i = 0; i < 10; i++)
		cout << u2(e) << endl;
		
	bernoulli_distribution b;
    for(int i = 0; i < 10; i++)
        cout << b(e) << endl;
        
    normal_distribution<> u3(2,0.25);
	e.seed(time(0));
    for(int i = 0; i < 10; i++)
        cout << u3(e) << endl;		
	
    return 0;
}

创建指定范围的随机整数;创建指定范围的随机实数;
创建服从0-1分布的随机数,bernoulli_distribution 意为伯努利分布即0-1分布;

使用normal_distribution<>来控制随机数引擎生成均值为2,标准差为0.25的正态分布数据;

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

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

相关文章

新版发布 | Cloudpods v3.10.5 和 v3.9.13 正式发布

Cloudpods v3.10.5 本期发布中&#xff0c;ocboot 部署脚本有较多变化&#xff0c;首先支持以非 root 用户执行安装流程&#xff0c;其次响应社区的呼吁&#xff0c;增加了–stack 参数&#xff0c;允许 Allinone 一键安装仅包含私有云&#xff08;参数为 edge&#xff09;或云…

TikTok直播:新一代创收方式的崛起

在数字时代&#xff0c;社交媒体不仅是人们互动和娱乐的平台&#xff0c;还成为了一个创收的新领域。而TikTok直播&#xff0c;一个快速崛起的形式&#xff0c;正引领着新一代创作者们走向成功&#xff0c;实现创收梦想。 本文将深入探讨TikTok直播的崛起&#xff0c;以及它为…

2023 蓝帽杯初赛web部分取证复现

前言&#xff1a;初赛进线下了&#xff0c;计划着在决赛前突击学习一下取证&#xff0c;但时间还是太紧 只看了很多内存取证和手机取证 计算机取证和服务器取证没掌握 ---( 不过复赛没考&#xff0c;也算狗运了) 目录 <1> web-LovePHP(file()函数侧信道攻击) <2&g…

微服务保护-流量控制

流量控制 雪崩问题虽然有四种方案&#xff0c;但是限流是避免服务因突发的流量而发生故障&#xff0c;是对微服务雪崩问题的预防。我们先学习这种模式 簇点链路 当请求进入微服务时&#xff0c;首先会访问DispatcherServlet&#xff0c;然后进入Controller、Service、Mapper&…

拜占庭将军问题与分布式一致性算法(Raft、Paxos)理解

背景 在常见的分布式系统中&#xff0c;总会发生诸如机器宕机或网络异常&#xff08;包括网络消息的延迟、丢失、重复、乱序&#xff0c;还有网络分区&#xff09;等情况。Paxos算法需要解决的问题就是如何在一个可能发生上述异常的分布式系统中&#xff0c;快速且正确地在集群…

GitLab使用的最简便方式

GitLab介绍 GitLab是一个基于Git版本控制系统的开源平台&#xff0c;用于代码托管&#xff0c;持续集成&#xff0c;以及协作开发。它提供了一套完整的工具&#xff0c;以帮助开发团队协同工作、管理和部署代码。 往往在企业内部使用gitlab管理代码&#xff0c;记录一下将本地代…

win11将visual studio 2022的调试控制台改为windows terminal

一、前言 默认的调试控制台太丑了&#xff0c;字体也没有好看的&#xff0c;还是更喜欢windows terminal 二、修改 2.1 修改之前 2.2 修改步骤 打开windows terminal点这个向下的标志 选择settings按照下图1, 2, 3步骤依次操作即可 2.3 修改之后 总结 漂亮很多了

在Kubernetes上安装和配置Istio:逐步指南,展示如何在Kubernetes集群中安装和配置Istio服务网格

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

六、串口通信

六、串口通信 串口接口介绍使用串口向电脑发送数据电脑发送数据控制LED灯 串口接口介绍 SBUF是串口数据缓存器&#xff0c;物理上是两个独立的寄存器&#xff0c;但占用相同的地址。写操作时&#xff0c;写入的是发送寄存器&#xff1b;读操作时&#xff0c;读出的是接收寄存器…

【数据库系统概论】数据模型

数据模型是什么两类数据模型两步抽象概念模型数据模型 常用的数据模型感谢 &#x1f496; 数据模型是什么 模型是对现实世界中某个对象特征的模拟和抽象。比如飞机模型就体现了飞机的特性&#xff0c;它模拟飞机的起飞、飞行和降落&#xff0c;它抽象了飞机的基本特征——机头…

C++之vector::insert与vector::insert用法区别总结(二百二十二)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

Loguru:功能强大、简单易用的Python日志库

文章目录 Loguru:Python的日志库安装 Loguru基本用法配置 Loguruadd() 语句remove() 语句设置日志文件保留日志的等级设置控制台日志显示等级Loguru:Python的日志库 Loguru 是一个功能强大、简单易用的日志库,可以让 Python 的日志记录变得更加轻松。它提供了丰富的功能和配…

Kotlin | 在for、forEach循环中正确的使用break、continue

文章目录 for循环中使用break、continueLabel标签forEach中如何退出循环资料 Kotlin 有三种结构化跳转表达式&#xff1a; return&#xff1a;默认从最直接包围它的函数或者匿名函数返回。break&#xff1a;终止最直接包围它的循环。continue&#xff1a;继续下一次最直接包围…

【软考复习系列】计算机网络易错知识点记录

参考文章&#xff1a;图解路由器&#xff1a;这玩意儿能连接全世界的网络&#xff1f; - 知乎 (zhihu.com) 宏内核和微内核 宏内核应该叫单内核或者单核。在这种单核的设计中&#xff0c;内核是一个大的整体&#xff0c;所有内核服务都运行在一个地址空间中&#xff0c;函数之…

软件设计模式系列之九——桥接模式

1 模式的定义 桥接模式是一种结构型设计模式&#xff0c;它用于将抽象部分与其实现部分分离&#xff0c;以便它们可以独立地变化。这种模式涉及一个接口&#xff0c;它充当一个桥&#xff0c;使得具体类可以在不影响客户端代码的情况下改变。桥接模式将继承关系转化为组合关系…

Matlab图像处理-强度分层法

强度分层法 强度分层技术是最简单的伪彩色图像处理方法之一。 如果将一幅图像被描述为空间坐标(x,y) 的强度函数f(x,y) &#xff0c;则分层的方法可以看作是将一些平面平行于图像坐标平面(x,y) &#xff0c;然后将每个平面在相交区域切割图像函数。下图展示了使用平面将图像函…

vue+axios+el-progress(elementUI组件)实现下载进度条实时监听(小白简洁版)

一、实现效果 二、实现方式 方案&#xff1a;使用axios方法onDownloadProgress方法监听下载进度 使用此方式的前提&#xff01;&#xff01;&#xff01;请让后端在响应头中加上content-length&#xff0c;存放下载文件的总大小&#xff0c;如下图&#xff1a; 三、代码 1、进…

【Git】03-GitHub

文章目录 1. GitHub核心功能2. GitHub搜索项目3. GitHub搭建个人博客4. 团队项目创建5. git工作流选择5.1 需要考虑的因素5.2 主干开发5.2 Git Flow5.3 GitHub Flow5.4 GitLab Flow(带生产分支)5.4 GitLab Flow(带环境分支)5.4 GitLab Flow(带发布分支) 6. 分支集成策略7. 启用…

redis 集群(cluster)

1. 前言 我们知道&#xff0c;在Web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务&#xff08;99.9%、99.99%、99.999% 等等&#xff09;。但是在Redis语境中&#xff0c;高可用的含义似乎要宽泛一些&#xf…