The invention discloses a method for generating random numbers, which belongs to the field of computer. The method of generating random number is an improved algorithm of interval algorithm under the condition of integer operation with limited precision. The main improvements include the implicit segmentation method of output interval and the 3-subinterval renormalization method of output interval. This method completely eliminates the rounding error of the output interval segmentation of the interval algorithm, and also greatly alleviates the rounding error of the input interval segmentation, thus basically solves the problem that the quality of the output random number of the interval algorithm decreases due to the finite precision operation, and realizes that the input data of any given probability distribution can be accurately or approximated under the condition of the finite precision integer operation. The exact method is converted to random numbers with arbitrary specified probability distribution.
【技术实现步骤摘要】
一种生成随机数的方法
本专利技术涉及计算机领域,特别涉及一种生成随机数的方法。
技术介绍
随机数在计算机仿真和信息安全等领域具有广泛的应用。随机数的质量,即随机数真实分布与目标分布的统计距离,是评价随机数生成方法的重要指标。在信源统计模型已知的条件下,文献[1]提出的区间算法(IntervalAlgorithm)不仅可以生成高质量的随机数,而且生成随机数的效率是各种已知方法中最高的。但原始的区间算法是基于无限精度算术运算的,当使用有限精度算术运算特别是有限精度整数运算时,存在以下问题:1、区间分割的舍入误差问题:分割区间需要进行除法运算,在一般情形下,有限精度的除法运算必然导致舍入误差。提高运算精度是缓解这一问题的常规思路,但无法消除这一问题。2、输入区间跨输出子区间边界的问题:区间算法运行中,会出现输入区间长度很小时仍横跨两个相邻输出子区间的情形,因而无法确定下一个输出的符号,输出区间不能有效地缩小,导致在整体精度限制下输入区间的表示精度恶化,进一步加剧输入区间分割的舍入误差问题。这一问题是无法通过简单提高运算精度来缓解的。舍入误差会直接导致输出随机数的概率分布偏离目标概率分布,即随机数质量下降。所以,如何在有限精度运算下设计具有低舍入误差或零舍入误差的区间算法是区间算法设计的一个关键点。文献[2]在整数运算条件下给出了两种实用的区间算法。一种算法用于将二元等概率独立同分布序列转换为多元任意分布独立同分布序列,另一种算法用于将多元任意分布独立同分布序列转换为二元等概率独立同分布序列。第一种算法利用了输入为二元等概率独立同分布序列的特点,将输入区间长度初始 ...
【技术保护点】
1.一种生成随机数的方法,其特征在于,所述方法包括:设输入序列为在集合
【技术特征摘要】
1.一种生成随机数的方法,其特征在于,所述方法包括:设输入序列为在集合中取值的二元独立同分布随机序列,概率分布为式中a0和a1为互素正整数;设拟输出序列为在中取值的长度为N的二元独立同分布随机序列,概率分布为式中b0和b1为互素正整数;预设的算法参数包括区间长度底数β(β为大于等于2的整数)和区间长度指数k(k为正整数);步骤一、初始化累计输出长度变量n为0;初始化输入区间端点列表变量I为(0,βk),其中列表是指支持按位置索引元素、插入元素和删除元素的动态数组;初始化输出区间分割端点列表变量J为(0,βk),候选输出序列列表变量K为(λ),其中λ表示长度为0的空字符串;步骤二、若列表K的长度小于3,则根据拟输出序列的概率分布以精确分割区间的方式对输出区间分割端点列表J和候选输出序列列表K进行细化直至列表K的长度等于3,其中,当待细化的输出区间或输出子区间无法精确分割时,则对该区间进行隐性分割,即将该区间分割为两部分但不产生新的候选输出比特,并保证其中较大的一部分是输出概率分布的公分母b0+b1的整数倍,使其在下一次分割时可以获得精确分割;步骤三、计算输入区间分割点式中表示小于等于实数r的最大整数;从输入序列读取一个比特x,若x=0,则更新变量I为列表(I[0],I′),否则更新变量I为列表(I′,I[1]);步骤四、比较输入区间端点列表I和输出区间分割端点列表J,除了保留列表J中与输入区间[I[0],I[1])有交集的子区间的端点以及对应于该子区间的列表K中的候选输出序列,删除列表J和K中的其余所有元素,其中所述列表J中的子区间均为列表J中相邻端点组成的左闭右开区间,所述对应于列表J中某子区间的列表K中的候选输出序列为列表K中与该子区间左端点在列表J中的编号具有相同编号的候选输出序列;步骤五、以输出区间分割端点列表J的左端点J[0]为原点对列表I和J中的所有端点进行重新定位,即将列表I和J中的所有元素减去J[0];步骤六、输出列表K中所有候选序列...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。