C# 随机数生成 Mersenne Twister 马特赛特旋转演算法 梅森旋转算法

2023-09-13 20:26:14

NuGet安装MathNet.Numerics
引用:
using MathNet.Numerics.Random;

        /// <summary>
        /// 包括lower,不包括upper
        /// </summary>
        /// <param name="lower"></param>
        /// <param name="upper"></param>
        /// <param name="randomResult"></param>
        public static void GetRandom(int lower,int upper,out int randomResult)
        {
            var random = new MersenneTwister(RandomSeed.Robust()); 
            randomResult= random.Next(lower, upper);
        }

Mersenne Twister算法是一种伪随机数发生器,名字来源于其周期长度通常取自Mersenne质数。它是由Makoto Matsumoto(松本)和Takuji Nishimura(西村)于1997年开发的,基于有限二进制字段上的矩阵线性再生。它的主要作用是生成伪随机数,并修正了古老随机数生成算法的许多缺陷。

Mersenne Twister算法利用线性反馈移位寄存器(LFSR)生成随机数。这个寄存器的反馈函数是某些位的简单异或,这些位也被称为抽头序列。一个n位的LFSR能在重复之前产生2n-1位长的伪随机序列。只有具有特定抽头序列的LFSR才能通过所有2n-1个内部状态,产生2^n-1位长的伪随机序列,这个输出序列就称为m序列。为了使LFSR成为最大周期的LFSR,由抽头序列加上常数1形成的多项式必须是本原多项式。

Mersenne Twister算法具有一些显著的优点。它生成的随机数质量好,随机性高,可以在计算机上容易实现,占用内存较少。与其他已使用的伪随机数发生器相比,它的运行速度更快,周期更长,可以达到2^19937-1,并且具有623维均匀分布的性质。对于一般的应用来说,这个周期长度已经足够了。此外,它的序列关联较小,能通过很多随机性测试。在计算机科学和工程领域,Mersenne Twister算法被广泛用于需要产生随机数的情况。

在这里插入图片描述

更多推荐

Cento7 Docker安装Zabbix,定制自定义模板

1.先安装docker环境yum-yinstallyum-utilsdevice-mapper-persistent-datalvm2#导入docker安装库yum-config-manager\--add-repo\https://download.docker.com/linux/centos/docker-ce.

华为HCIA(五)

Vlanid在802.1Q中高级ACL不能匹配用户名和源MAC2.4G频段被分为14个交叠的,错列的20MHz信道,信道编码从1到14,邻近的信道之间存在一定的重叠范围STA通过Probe获取SSID信息Snmp报文网络管理设备异常发生时会发送trap报文D类地址是组播地址,不能作为主机的IPv4地址路由表中没有MAC

MySQL性能优化——MYSQL执行流程

MySQL执行流程1-5如下图。MySQL的架构共分为两层:Server层和存储引擎层,Server层负责建立连接、分析和执行SQL。MySQL大多数的核心功能模块都在这实现,主要包括连接器,查询缓存、解析器、预处理器、优化器、执行器等。另外,所有的内置函数(如日期、时间、数学和加密函数等)和所有跨存储引擎的功能(如存

移动端适配以及多屏幕自适应方案

文章目录前言一、移动端适配问题二、meta-viewport标记三、rem字体适配四、vw和vh五、postcss转换插件总结前言本文主要记录适配移动端以及多屏幕的解决办法,还有postcss转换插件的编写。一、移动端适配问题在MDN中提到:在移动设备和其他窄屏设备中,某些内容在比普通屏幕更宽的虚拟窗口或视口中渲染页面

PC微信3.9.7内测版,更新功能一览(附下载)

之前小编发布了PC微信3.9.7的内测版本,不过大家没有内测权限,不能够安装体验,本次正式版终于来了,大家可以下载安装体验,和之前一样小编给大家介绍本次PC版微信更新的内容,感兴趣的朋友可以下载体验一下!1、聊天界面表情弹窗新增搜索表情功能大家比较期待的表情搜索功能终于上线了,大家以后聊天终于可以使用更加丰富的表情包了

C语言零基础教程(memset,memcpy函数,memmove函数)

文章目录前言一、memset函数二、memcpy函数三、memmove函数总结前言本篇文章来讲解一下memset和memcpy函数,这两个函数在C语言中也是比较重要的,这里我们就来学习一下这两个函数的使用方法吧。一、memset函数memset函数是一个C标准库中的函数,用于将一块内存区域的每个字节设置为指定的值。me

双向链表的实现(增删查改)——最好理解的链表

双向链表的实现一,双向链表的特点二,双向链表的结构三,双向链表的内容实现3.1创建node节点3.2初始化3.3打印3.4插入3.4.1尾插3.4.2头插3.4.3在pos位置上插入3.5删除3.5.1尾删3.5.2头删3.5.3删除pos位置上的数据四,调试技巧(具体示例)五,总结一,双向链表的特点这里的双向链表就是

Python语言学习实战-内置函数reduce()的使用(附源码和实现效果)

实现功能reduce()是一个内置函数,它用于对一个可迭代对象中的元素进行累积操作。它接受一个函数和一个可迭代对象作为参数,并返回一个单个的累积结果。reduce()函数的语法如下:reduce(function,iterable[,initializer])其中,function是一个二元函数,它接受两个参数并返回一

Mysql的基本查询练习

目录一、Create1.1单行数据+全列插入1.2多行数据+指定列插入1.3插入否则更新1.4替换二、Retrieve2.1全列查询2.2指定列查询2.3查询字段为表达式2.4为查询结果指定别名2.5结果去重2.6where条件2.6NULL的查询2.7结果排序三、Update四、Delete五、插入查询结果六、聚合函

学科知识图谱学习平台项目 :技术栈Java、Neo4j、MySQL等超详细教学

项目设计集合(人工智能方向):助力新人快速实战掌握技能、自主完成项目设计升级,提升自身的硬实力(不仅限NLP、知识图谱、计算机视觉等领域):汇总有意义的项目设计集合,助力新人快速实战掌握技能,助力用户更好利用CSDN平台,自主完成项目设计升级,提升自身的硬实力。专栏订阅:项目大全提升自身的硬实力[专栏详细介绍:项目设计

ARMv7处理器

本文档介绍常见的ARM架构,包括Cortex-A5,Cortex-A7,Cortex-A8,Cortex-A9,Cortex-A15.常见的术语DFT(DesignforTest),为了增强芯片可测性而采用的一种设计方法APB(AdvancedPeripheralBus),是一种低速外设总线接口,通常用于将外部设备(如

热文推荐