随机数生成(均匀分布、正态分布、C++)

2023-11-08

一、 生成均匀分布的随机数

1. rand

生成的随机数在0到RAND_MAX(2147483647)之间,在stdlib中定义,使用 % 结合 / 可生成某个范围内的随机数,但是这里生成的随机数是唯一确定的。

#include <iostream>

int main () {
  for (int i = 0; i < 10; ++i) {
    std::cout << rand() << std::endl;
  }
  return 0;
}

2. srand

使用rand函数无法得到变化的随机数,可以使用srand来实现。使用这个srand()函数必须加上头文件 "time.h",需要引入ctime库。其中time(0)是获取从1970年开始的时间(单位:s),然后再获取rand(),这时rand得到的就是随机变化的随机数了。

#include <iostream>

int main () {
  srand(time(0));
  // srand((unsigned)time(NULL)); // 将rand()函数植入系统时间种子
  for (int i = 0; i < 10; ++i) {
    std::cout << rand() << std::endl;
  }
  return 0;
}

3. 生成 0~100 之间的整数随机数

#include <iostream>

int main () {
  srand(time(0));
  for (int i = 0; i < 10; ++i) {
    std::cout << rand() % 100 << std::endl;
  }
  return 0;
}

4. 生成 0~1 之间的随机数

#include <iostream>

int main () {
  srand(time(0));
  for (int i = 0; i < 10; ++i) {
    std::cout << (rand() % 100) * 0.01 << std::endl;
  }
  return 0;
}
#include <iostream>

int main () {
  srand(time(0));
  for (int i = 0; i < 10; ++i) {
    std::cout << rand() * 1.0f / RAND_MAX << std::endl;
  }
  return 0;
}

 5. 生成 -1~1 之间的随机数

#include <iostream>

int main () {
  srand(time(0));
  for (int i = 0; i < 10; ++i) {
    std::cout << (rand() % 200) * 0.01 - 1 << std::endl;
  }
  return 0;
}

 

二、生成高斯/正态分布的随机数

Box-Muller算法利用均匀分布产生高斯分布随机数,算法如下:

上式中的U1和U2是两个在[0,1)上遵从均匀分布的随机数(生成[0,1)上遵从均匀分布的随机数通常使用的是梅森旋转算法)

经过这样的一种计算之后就能产生一个Z服从均匀分布的随机数,这看起来太神奇了,不得不佩服这个算法。说明一下,上面的三个式子,前两个取任何一个都可以用作算法,取正弦还是余弦是无所谓的。另外一点,上面的式子仅仅只能产生标准的高斯分布,若要产生给定的均值和方差其实也很简单。

                                                                   Y=u+(Z*sigma)

上式中的u,sigma是自定义的期望和方差。

#include <cmath>
#include <fstream>
 
int main() {
  std::ofstream fout("gauss.txt", std::ios::out);
	srand(time(0));
  for (int i = 0; i < 10000; ++i) {
    double U1 = rand() * 1.0f / RAND_MAX; // 0~1均匀分布
    double U2 = rand() * 1.0f / RAND_MAX; // 0~1均匀分布
    double Z = sqrt(-2 * log(U1))*cos(2 * M_PI * U2);// 均值为0,方差为1的正态分布
    double Y = 1 + 2 * Z; // 均值为1,方差为4的正态分布
    fout << Y << "\n";
  }
	return 0;
}

可视化

import matplotlib.pyplot as plt
import numpy as np

data=list()
for line in open('gauss.txt', 'r'):
  d = float(line)
  data.append(d)
print(data)

bins=np.arange(-10, 10, 0.5)

plt.hist(data, bins, color='fuchsia', alpha=0.5)
plt.xlabel("range")
plt.ylabel("count")
plt.title("histogram")
plt.show()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

随机数生成(均匀分布、正态分布、C++) 的相关文章

  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • 如何使用 C# 中的参数将用户重定向到 paypal

    如果我有像下面这样的简单表格 我可以用它来将用户重定向到 PayPal 以完成付款
  • C 编程 - 文件 - fwrite

    我有一个关于编程和文件的问题 while current NULL if current gt Id Doctor 0 current current gt next id doc current gt Id Doctor if curre
  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写

随机推荐

  • 集合框架--双向链表的模拟实现

    Java中的鏈表 分為三種 1 單向鏈表 由一個節點元素 可以找到相鄰的下一個節點元素 2 雙向鏈表 由一個節點元素 可以找到其相鄰的前 后節點元素 3 循環鏈表 由一個節點元素 可以找到其相鄰的前 后節點元素 由最后一個節點元素可以找到第
  • notepad使用回车与换行

    转载于 http www pythontab com html 2017 linuxkaiyuan 0115 1116 html 一 回车与换行定义 回车 r 本义是光标重新回到本行开头 r的英文return 换行 n 本义是光标往下一行
  • 浅谈Spring中的@Controller注解

    Spring 的 Controller 是单例还是多例 怎么保证并发的安全 controller默认是单例的 不要使用非静态的成员变量 否则会发生数据逻辑混乱 正因为单例所以不是线程安全的 Controller public class S
  • buuctf-misc-小明的保险箱

    小明的保险箱 题目提示四位纯数字密码 但是附件下载下来是jpg文件 猜测是压缩包文件 winhex查看时没有找到什么信息 但是看到了存在txt文件 binwalk一下 把文件放入共享文件夹 上一个博客有提及 binwalk 存在压缩文件 f
  • Java多线程实现的四种方式

    Java多线程实现的方式有四种 1 继承Thread类 重写run方法 2 实现Runnable接口 重写run方法 实现Runnable接口的实现类的实例对象作为Thread构造函数的target 3 通过Callable和FutureT
  • ES6 扩展运算符-将伪数组转换为真正的数组-Array.from()-find()-findIndex()-includes()

    扩展运算符可以将数组拆分成以逗号分隔的参数序列 console把逗号当成console log的分隔符 输出在后台 a b c 扩展运算符的应用 1 数组合并 1 1 1 2 2 将类数组或可遍历对象转换为真正的数组 转换的目的 可以调用数
  • Mybatis

    一 Mybatis简介 1 1 简介 MyBatis 是一款优秀的持久层框架 它支持自定义 SQL 存储过程以及高级映射 MyBatis免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作 MyBatis可以通过简单的 XML 或
  • Welcome to CSDN————My First Time Write Blog

    Welcome to CSDN My First Time Write Blog 蒟蒻到巨佬 遥不可及 的成长计划 新初一记 第一季自我总结 New hand 来自CSP的初一蒟蒻 请求巨佬教博客的正确 标准写法 2019年7月纪中中集训自
  • 使用最小花费爬楼梯

    到达第i级台阶的阶梯顶部的最小花费 有两个选择 最后踏上了第i级台阶 最小花费dp i 再迈一步到达第i级台阶楼层顶部 最后踏上了第i 1级台阶 最小花费dp i 1 再迈两步跨过第i级台阶直接到达第i级台阶的阶梯顶部 所以到达第i级台阶的
  • MATLAB中求图像中某一区域的质心

    在 MATLAB图像处理宝典 秦襄培 编 384页 有 一个regionprops函数 这个实现对二值图的多种描述 以下内容http blog 163 com zwg 1314 126 blog static 353332462011918
  • Android Studio 问题(二)Failed to find Build Tools revision 28.0.2

    在第一次配置使用Android Studio的时候 可能会出现 Failed to find Build Tools revision 28 0 2 此时 只需要根据提示 点击下方的连接进行安装即可 如果不出现下方的链接 点击右上角的 Tr
  • 使用Navicat远程连接服务器上的mysql数据库

    环境准备 服务器中安装mysql数据库 本地安装Navicat Premium 准备好服务器的ip地址 服务器登录密码 mysql数据库的密码等 服务器中mysql忘记密码解决方法 修改服务器中MySQL的登录设置 通过命令vim etc
  • npg收集指定多个文件目录存储大小监控指标

    原理 1 利用netdata的命令参数 collector textfile directory配置从指定文件读取监控指标信息 2 利用linux cron定时任务脚本收集指定目录存储空间大小信息写入 collector textfile
  • SpringBoot整合数据库之如何整合JdbcTemplate?怎么配置JdbcTemplate多数据源(连接多个数据库)?

    1 整合JdbcTemplate 1 1 引入需要的pom依赖
  • 《Java性能调优实战》笔记(一)Java编程性能调优、多线程性能优化

    文章目录 一 Java性能调优概述 1 1 性能调优标准 1 2 制定性能调优策略 二 Java编程性能调优 2 1 字符串 2 2 正则表达式 2 3 ArrayList和LinkedList的选择 2 4 使用Stream提高遍历集合效
  • 毕业设计-基于 BP 神经网络的房地产价值评估研究-matlab

    目录 前言 课题背景和意义 实现技术思路 一 房地产价值评估指标体系构建 二 基于 BP 神经网络的房地产评估模型构建 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕
  • php发送邮箱源码,php 发送邮箱实例代码

    php教程 发送邮箱实例代码 class pop3 public server pop3 126 com 服务器名 public server port 110 服务器端口 public timeout 30 超过多少时间就算连接失败 pu
  • java启动jar包修改JVM默认内存

    JVM默认物理内存 JVM初始分配的内存由 Xms指定 默认是物理内存的1 64 JVM最大分配的内存由 Xmx指定 默认是物理内存的1 4 默认空余堆内存小于40 时 JVM就会增大堆直到 Xmx的最大限制 空余堆内存大于70 时 JVM
  • 使用pydumpck反编译pyintaller生成的exe文件 python3.10

    目录 前言 一 pyinstaller生成exe 二 pydumpck反编译exe 1 安装 2 反编译exe文件 3 查看反编译的py文件 前言 pyinstaller生成的exe文件想反编译看下源码 但由于安装的python版本太高 p
  • 随机数生成(均匀分布、正态分布、C++)

    一 生成均匀分布的随机数 1 rand 生成的随机数在0到RAND MAX 2147483647 之间 在stdlib中定义 使用 结合 可生成某个范围内的随机数 但是这里生成的随机数是唯一确定的 include