当前位置: 首页 > news >正文

【C++】详解用标准库的std::mt19937生成随机数

2023年8月16日,周三晚上

写了1个半小时


目录

  • 概述
  • 英文文档
  • 什么是mt19937
  • 什么是状态大小
  • 头文件
  • std::mt19937的常用成员函数
  • 1. 构造函数:
  • 2. 种子操作函数:
  • 3. 随机数生成函数:
  • 4. 辅助函数:
  • 生成种子值
  • 方法1:使用std::random_device
  • 方法2:使用时间戳
  • 举例说明

概述

英文文档

std::mersenne_twister_engine - cppreference.com

https://cplusplus.com/reference/random/mt19937/

什么是mt19937

std::mt19937是C++标准库中的一个伪随机数生成器类,它实现了梅森旋转算法(Mersenne Twister)。mt19937类是一个随机数引擎,可以生成高质量的伪随机数序列。

A Mersenne Twister pseudo-random generator of 32-bit numbers with a state size of 19937 bits.

一个有着19937位状态大小的能够生成32位数的梅森旋转伪随机生成器

什么是状态大小

状态大小(state size)指的是在随机数生成器中用于存储和更新内部状态的位数或字节数。随机数生成器的状态是一个关键的组成部分,它影响着生成的随机数序列的质量和性能。

状态大小越大,生成的随机数序列的周期(即重复之前经过的步骤数)通常越长,这意味着生成的随机数更不容易重复。较大的状态大小还可以提供更好的统计特性和更高的随机性。

状态大小的选择通常需要权衡随机性和性能之间的关系。较大的状态大小可能需要更多的内存和计算资源来存储和更新状态,可能会影响性能。因此,在选择状态大小时需要综合考虑应用的需求、可用资源和随机性要求。

对于std::mt19937而言,它使用19937位的状态大小,这是一个较大的状态大小,可以提供较长的周期和较好的随机性特性。

头文件

使用mt19937需要包含<random>头文件。

std::mt19937的常用成员函数

1. 构造函数:

  •  mt19937():默认构造函数,使用默认的种子初始化随机数引擎。
  •  mt19937(unsigned int seed):使用指定的种子初始化随机数引擎。

2. 种子操作函数:

  •  seed():设置种子值为默认值。
  •  seed(unsigned int seed):设置新的种子值。

3. 随机数生成函数:

  •  operator():生成一个32位的随机整数。

4. 辅助函数:

  •  discard(unsigned long long z):等同于执行z次operator(),以丢弃z次生成的随机数。
  •  min():获取可生成的最小随机数值。
  •  max():获取可生成的最大随机数值。

生成种子值

方法1:使用std::random_device

std::random_device是C++标准库中的一个类,它通常被用作生成伪随机数生成器的种子,以提供更高质量的随机性。

#include <chrono>
#include <random>
#include<iostream>int main() {std::random_device rd; // 创建一个std::random_device对象unsigned int seed = rd(); // 生成一个随机的种子值std::mt19937 engine(seed); // 使用随机的种子值创建一个伪随机数生成器std::cout<<engine();return 0;
}

方法2:使用时间戳

可以使用C++标准库中的std::chrono库来获取当前的时间戳,并将其转换为整数形式作为种子值。

#include <chrono>
#include <random>
#include <iostream>unsigned int generateSeedFromTimestamp() {auto now = std::chrono::system_clock::now(); // 获取当前时间点auto timestamp = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()); // 转换为毫秒级的时间戳return static_cast<unsigned int>(timestamp.count()); // 将时间戳转换为整数种子值
}int main() {unsigned int seed = generateSeedFromTimestamp(); // 生成种子值std::mt19937 engine(seed); // 使用种子值初始化伪随机数生成器std::cout<<engine();return 0;
}

举例说明

#include <chrono>
#include <random>
#include<iostream>int main() {std::random_device rd; // 创建一个std::random_device对象unsigned int seed = rd(); // 生成一个随机的种子值std::mt19937 engine(seed); //使用随机的种子值创建一个伪随机数生成器engine.seed(rd());//给engine设置一个新的种子值std::cout << "最小值:" << engine.min() << std::endl; // 输出最小值std::cout << "最大值:" << engine.max() << std::endl; // 输出最大值std::cout << "生成一个随机数:" << engine() << std::endl; // 输出最大值engine.discard(5);return 0;
}

相关文章:

【C++】详解用标准库的std::mt19937生成随机数

2023年8月16日&#xff0c;周三晚上 写了1个半小时 目录 概述英文文档什么是mt19937什么是状态大小头文件std::mt19937的常用成员函数1. 构造函数&#xff1a;2. 种子操作函数&#xff1a;3. 随机数生成函数&#xff1a;4. 辅助函数&#xff1a;生成种子值方法1&#xff1a;使…...

科大讯飞发布星火认知大模型2.0版——体验实测

8月15日&#xff0c;科大讯飞举行讯飞星火认知大模型V2.0升级发布会&#xff0c;对外展示其升级后的大模型代码能力和多模态能力&#xff0c;同时发布并升级搭载讯飞星火认知大模型V2.0能力的多项应用和产品。自5月6日首发以来&#xff0c;星火认知大模型经历V1.5版本的迭代&am…...

部署mysql到win10电脑上

中间出现了很多问题&#xff0c; 记录一下 我这边是去官网下载的 &#xff0c;链接&#xff1a;https://dev.mysql.com/downloads/mysql/ 我这边选了不是最新版本的MySQL&#xff0c;因为第一次安装8.1.0版本的&#xff0c;死活运行不起来&#xff0c;直接卸载安重装了&#x…...

nginx+php 出现502 bad gateway

nginxphp 出现502 bad gateway&#xff0c;一般这都不是nginx的问题&#xff0c;而是由于 fastcgi或者php的问题导致的&#xff0c;常见的有以下几种。 1. php.ini 的memory_limit 过小&#xff08;如果有个别php程序进程需要占用极大内存时这个必须注意&#xff09; 2. ph…...

基于LVQ神经网络的人脸朝向识别

1案例背景 1.1人脸识别概述 人脸识别作为一个复杂的模式识别问题,近年来受到了广泛的关注,识别领域的各种方法在这个问题上各显所长,而且发展出了许多新方法,大大丰富和拓宽了模式识别的方向。人脸识别、检测,跟踪、特征定位等技术近年来一直是研究的热点。人脸识别是人脸应用…...

Leetcode Top 100 Liked Questions(序号53~74)

53. Maximum Subarray 题意&#xff1a;一个数组&#xff0c;找到和最大的子串 我的思路 我记得好像On的动态规划来做的&#xff1f;但是想不起来了&#xff0c;先死做&#xff0c;用的前缀和——TLE超时 那就只能想想dp怎么做了 假设dp[i]表示的是以 i 为右端点的最大的…...

Rabbitmq消息不丢失

目录 一、消息不丢失1.消息确认2.消息确认业务封装2.1 发送确认消息测试2.2 消息发送失败&#xff0c;设置重发机制 一、消息不丢失 消息的不丢失&#xff0c;在MQ角度考虑&#xff0c;一般有三种途径&#xff1a; 1&#xff0c;生产者不丢数据 2&#xff0c;MQ服务器不丢数据…...

Kotlin runBlocking launch多个协程读写mutableListOf时序

Kotlin runBlocking launch多个协程读写mutableListOf时序 import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.runBlockingfun main(args: Array<String>) {var lists mutableListOf<String>()runBlocking {launch {r…...

Spring Cloud微服务治理框架深度解析

在学习一个技术之前&#xff0c;首先我们要了解它是做什么的&#xff0c;我们为什么要用它。不然看再多资料都理解不了&#xff0c;因此我们先来讲解下Spring Cloud Spring Cloud是一套微服务治理框架&#xff0c;几乎考虑到了微服务治理的方方面面。那么接下来具体说下 Spring…...

设计模式之原型模式Prototype的C++实现

1、原型模式提出 在软件功能设计中&#xff0c;经常面临着“某些结构复杂的对象”的创建工作&#xff0c;且创建的对象想拥有其他对象在某一刻的状态&#xff0c;则可以使用原型模型。原型模型是通过拷贝构造函数来创建对象&#xff0c;并且该对象拥有其他对象在某一刻的状态。…...

Java 中操作 Redis

文章目录 一、Redis 常用数据类型二、Redis 常用操作命令1. 字符串命令2. 哈希命令3. 列表命令4. 集合命令5. 有序集合命令6. 通用命令 三、在 Java 中操作 Redis1. 导入 maven 坐标2. 配置 Redis 数据源3. 编写配置类 四、在代码中的具体使用 一、Redis 常用数据类型 Redis 存…...

数据结构--最短路径 Dijkstra算法

数据结构–最短路径 Dijkstra算法 Dijkstra算法 计算 b e g i n 点到各个点的最短路 \color{red}计算\ begin\ 点到各个点的最短路 计算 begin 点到各个点的最短路 如果是无向图&#xff0c;可以先把无向图转化成有向图 我们需要2个数组 final[] &#xff08;标记各顶点是否已…...

在 Linux 虚拟机上使用 Azure 自定义脚本扩展版本

参考 azure创建虚拟机,创建虚拟机注意入站端口规则开放80端口、 2.转到资源&#xff0c;点击扩展应用程序&#xff0c;创建存储账户&#xff0c;创建容器&#xff0c;上传文件&#xff0c;选择文件&#xff0c;会自动执行部署。 apt-get update -y && apt-get insta…...

W5500-EVB-PICO 做UDP Server进行数据回环测试(七)

前言 前面我们用W5500-EVB-PICO 开发板在TCP Client和TCP Server模式下&#xff0c;分别进行数据回环测试&#xff0c;本章我们将用开发板在UDP Server模式下进行数据回环测试。 UDP是什么&#xff1f;什么是UDP Server&#xff1f;能干什么&#xff1f; UDP (User Dataqram P…...

ES搜索引擎入门+最佳实践(九):项目实战(二)--elasticsearch java api 进行数据增删改查

本篇是这个系列的最后一篇了,在这之前可以先看看前面的内容: ES搜索引擎入门最佳实践(一)_flame.liu的博客-CSDN博客 ES搜索引擎入门最佳实践(二)_flame.liu的博客-CSDN博客 ES搜索引擎入门最佳实践(三)_flame.liu的博客-CSDN博客 ES搜索引擎入门最佳实践(四)_flame.liu的博…...

android内存分析工具记录,请利用好最后2个神器

相机见证了java内存暴增和native持续增长的问题&#xff0c;因此这里记录一下使用的工具情况&#xff0c;方便后续继续使用 一、java 内存 如果是java层的内存可以直接借助leakCanary工具&#xff0c;配置也很简单&#xff0c;直接在build.gradle中添加依赖即可&#xff1a; …...

安科瑞变电所运维平台在电力系统中应用分析

摘要&#xff1a;现代居民生活、工作对电力资源的需求量相对较多&#xff0c;给我国的电力产业带来了良好的发展机遇与挑战。探索电力系统基本构成&#xff0c; 将变电运维安全管理以及相应的设备维护工作系统性开展&#xff0c;能够根据项目实践工作要求&#xff0c;将满足要求…...

uniapp开发微信小程序使用painter将页面转换为图片并保存到本地相册

引言 我使用到painter的原因是&#xff0c;在uniapp开发微信小程序时&#xff0c;需要将一个页面的内容转换成图片保存到本地相册。 起初在网上找到很多都是在uniapp中使用 html2canvas 将网页转换成图片再jspdf将图片转换为pdf&#xff0c;但是这种方式在小程序环境不支持&am…...

790. 数的三次方根

文章目录 QuestionIdeasCode Question 给定一个浮点数 n &#xff0c;求它的三次方根。 输入格式 共一行&#xff0c;包含一个浮点数 n 。 输出格式 共一行&#xff0c;包含一个浮点数&#xff0c;表示问题的解。 注意&#xff0c;结果保留 6 位小数。 数据范围 −10000≤…...

POSTGRESQL 关于2023-08-14 数据库自动启动文章中使用KILL 来进行配置RELOAD的问题解释...

开头还是介绍一下群&#xff0c;如果感兴趣Polardb ,mongodb ,MySQL ,Postgresql ,redis &#xff0c;SQL SERVER ,ORACLE,Oceanbase 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请加 liuaustin3微信号 &…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...