一种浮点随机数的生成方法及系统的制作方法

文档序号:6380767阅读:330来源:国知局
专利名称:一种浮点随机数的生成方法及系统的制作方法
一种浮点随机数的生成方法及系统技术领域
本申请涉及计算机领域,特别涉及一种浮点随机数的生成方法及系统。
背景技术
浮点在计算机系统中普遍存在,几乎每种语言都有浮点数据类型。从个人计算机到巨型计算机都有浮点加速器;多数编译器要经常用来编译浮点算法。在科学计算中,浮点的正确性更是起着举足轻重的作用。对浮点的测试除了特殊数值的测试,还需要一般浮点数来验证结果。因为浮点是无法穷尽测试的,所以需要使用大量的可控随机数来进行测试。
现有的浮点数选取方法采用整型随机数的产生方法,由于整数与浮点数的构造不同,采用整型随机数的产生方法,产生的浮点随机数的跨度不均匀,随机性不强。发明内容
本申请所要解决的技术问题是提供一种浮点随机数的生成方法及系统,能够均匀的产生随机数,提升产生的随机数的随机性。其具体方案如下
一种浮点随机数的生成方法,包括
设定浮点随机数的生成区间、生成起点及生成个数;
依据所述生成区间及所述生成个数确定取数跨步参数;
以所述生成起点为初始点,所述取数跨步参数为选取标准,在所述生成区间中依次选取浮点数;当选取的浮点数个数与所述生成个数相等时,停止取数;
将选取的浮点数序列进行乱序操作,生成浮点随机数。
上述的方法,优选的,所述依据所述生成区间及所述生成个数确定取数跨步参数包括
确定所述生成区间内浮点数的总个数;
求取所述总个数除以所述生成个数的结果值;
依据预设的计算规则对所述结果值进行计算,获得所述取数跨步参数。
上述的方法,优选的,所述在生成区间中依次选取浮点数,当选取的浮点数个数与所述生成个数相等时,停止取数;
包括
将所述生成起点作为当前起始浮点数,选取所述起始浮点数后的第二浮点数;所述第二浮点数在所述生成区间中的位置编码与所述当前起始浮点数的位置编码的差值与所述取数跨步参数的值相等;
判断所述第二浮点数的值是否大于所述生成区间中浮点数的最大值;当不大于时,将所述第二浮点数作为新的当前起始浮点数;直至选取的浮点数个数与所述生成个数相等时,停止取数。
上述的方法,优选的,还包括
当判断所述第二浮点数的值大于所述生成区间中浮点数的最大值时,判断选取的浮点数的个数是否与所述生成个数相等;当不相等时,将所述生成区间中浮点数的最小值作为当前起始浮点数;直至选取的浮点数个数与所述生成个数相等时,停止取数。
上述的方法,优选的,还包括
将所述生成区间中浮点数的最小值作为当前起始浮点数,进行选数时,判断所述第二浮点数的值是否大于所述生成起点;
当大于时,停止取数。
上述的方法,优选的,还包括
判断选取的浮点数的个数是否与所述生成相等;当不相等时,将所述第二浮点数进行舍弃。
上述的方法,优选的,在选取浮点数的过程中,每选取一浮点数,为该浮点数随机分配赋值符号。
一种浮点随机数生成系统,包括
设定单元,用于设定浮点随机数的生成区间、生成起点及生成个数;
确定单元,用于依据所述生成区间及所述生成个数确定取数跨步参数;
选取单元,用于以所述生成起点为初始点,所述取数跨步参数为选取标准,在所述生成区间中依次选取浮点数;当选取的浮点数个数与所述生成个数相等时,停止取数;
乱序单元,用于将选取的浮点数序列进行乱序操作,生成浮点随机数。
上述的系统,优选的,所述选取单元包括
确定子单元,用于确定所述生成区间内浮点数的总个数;
计算子单元,用于求取所述总个数除以所述生成个数的结果值,并依据预设的计算规则对所述结果值进行计算,获得所述取数跨步参数。
上述的系统,优选的,所述选取单元包括
选取子单元,用于将所述生成起点作为当前起始浮点数,选取所述起始浮点数后的第二浮点数;所述第二浮点数在所述生成区间中的位置编码与所述当前起始浮点数的位置编码的差值与所述取数跨步参数的值相等;
判断子单元,用于判断所述第二浮点数的值是否大于所述生成区间中浮点数的最大值。
由以上本申请实施例提供的技术方案可见,本申请提供的一种浮点随机数的生成方法,可任意设定浮点随机数的生成区间、浮点数的生成起点及需要产生浮点数的个数;依据所述生成区间及所述生成个数确定取数的跨步参数;以所述生成起点为初始点,所述取数跨步参数为选取标准,在所述生成区间中依次选取浮点数;当选取的浮点数个数与所述生成个数相等时,停止取数;将选取的浮点数序列进行乱序操作,生成浮点随机数。
本申请实施例提供的浮点随机数生成方法,通过设定不同的操作参数使得产生的浮点随机数的跨度均匀,产生的随机数可以覆盖到不同的数量级,随机数的随机性强。


为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图I是本申请实施例公开的一种浮点随机数的生成方法实施例I的流程图
图2是本申请实施例公开的一种浮点随机数的生成方法实施例2的流程图
图3是本申请实施例公开的一种浮点随机数的生成方法实施例3的流程图
图4是本申请实施例公开的一种浮点随机数的生成系统实施例I的结构示意图5是本申请实施例公开的一种浮点随机数的生成系统实施例2的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
参考图1,示出了本申请一种浮点随机数的生成方法实施例I的流程图,可以包括以下步骤
步骤SlOl :设定随机数的生成区间、生成起点及生成个数;
本申请实施例提供的随机数生成算法,输入有两个N——需要产生的随机数个数,用来控制产生的随机数量;种子seed——作为随机数产生的起点。还可根据具体的生成需求设定其它要求参数。
为了满足取得的随机数能够覆盖各个范围,本申请实施例提供的浮点随机数生成方法,确定选取的生成区间,及生成起点。如生成区间为{从
,则开始生成随机数时,由起点开始随机取数据,达到最大数后返回到0,从O再开始取数,再次到达起点后停止取数。
步骤S102 :依据所述生成区间及所述生成个数确定取数跨步参数;
本申请实施例提供的浮点随机数生成方法中,所述确定取数跨步参数如图2所示,包括
步骤S201 :确定所述生成区间内浮点数的总个数;
步骤S202 :求取所述总个数除以所述生成个数的结果值;
步骤S203 :依据预设的计算规则对所述结果进行计算,获得所述取数跨步参数。
本申请实施例提供的生成方法中,主要思想是浮点最大数记为MAX,将
平均分为N等分,每等分区间随机取一浮点数,再随机地赋予符号,使得数据可正可负。 这里不能用MAX/N来分,因为浮点数分布是不均匀的,指数越大,分布就越稀疏,故落在[iX (MAX/N), (i+1) X (MAX/N)] (i=l,......,N — I)区间中的浮点数是不等的,这样就使得指数小的数被取中的概率减小,不利于随机性。所以应该用浮点总个数total/N分区间。 不考虑符号和非数,对于单精度,total = 231 — 223 + I,双精度,total = 263 — 252 + I。
步骤S103 :以所述生成起点为起始点,所述取数跨步参数为选取标准,在所述生成区间中依次选取浮点数;当选取的浮点数个数与所述生成个数相等时,停止取数;
步骤S104 :将选取的浮点数序列进行乱序操作,生成浮点随机数。
本申请实施例给出一具体流程图参考图3,对浮点随机数生成方法的具体执行过程进行详细描述,包括
步骤S301 :填写配置文件;
所述填写的配置文件中包括要选取的浮点数的个数,及开始选取浮点数的起点;
步骤S302 :根据数据个数计算取数跨步;
本申请中所涉及的跨步为符合要求的浮点总个数除以需要产生的浮点个数;
步骤S303 :—个跨步范围内取浮点数;
在计算得出的跨步范围内选取一浮点数;
步骤S304 :随机赋值符号;
本申请中,每选取一浮点数,均随机为该浮点数分配赋值符号;
步骤S305 :计算下一跨步区间;
本申请实施例提供的生成方法中,采用两种方法计算下一跨步区间,具体如下
按从小到大的顺序排列,浮点数X后第M个浮点数y的求法。设x后第M个浮点数的函数为y = LATER_NUMBER (x,Μ),该函数的实现通过浮点的内存表示求得想要的浮点数。浮点的内存表示是浮点存储格式的整数形式,y的内存表示=X的内存表示+ Μ。有了 y的内存表示,自然就有了浮点数y。这里要注意的是无效数问题,由于后面提到的随机数算法是靠与MAX的比较来执行的,所以采用这种方法时,需要一个无效数的判断问题。如果所得到数是非数就直接赋无穷大值INF。
在函数LATER_NUMBER实现的基础上,可以迭代求出满足要求的随机数序列{Ai}, 具体如算法a。span表示跨度,值为total/N。prime是一个小于span的素数,且不整除 span。检验prime是否是素数可以利用著名的Lehmann素数检测方法。
算法a:
起始值A0 = seed, BO = | seed , MO =小于seed的素数且不整除span,
SO = I, count = I, i=0。
①Mi+1 — Mi Xprime (mod span)。
②Ai+1 — LATER_NUMBER (Bi,Mi+l)。
③Si+1 — (Mi+l 3)&l0
④Ai+1 —( 一 I) Si+lXAi+1。
⑤Bi+1 — LATER_NUMBER (Bi, span)。
⑥ count 一 count + I。
⑦判断
如果Ai+1 ^ MAX,转到①。
否则,对Bi+2 做变换,Bi+2 的内存表示一Mi+1&4,Ai+2 — Bi+2,i — i + 1, count — count + I。转到①。
⑧判断如果count彡N,停止。否贝U, i — i十1,转到①。
随机数序列的迭代生成算法需要计数器count控制,因为total并不能完全被N 整除,即数据不能真正平分为N等分,随着N的增大,total/N的余数可能会大于span,所以用迭代算法得到的随机数的个数会略大于N。这时,用计数器进行控制就可以得到符合要求的随机数序列,而且并不影响整个随机序列取到不同数量级浮点数的初衷。
如果存在i,使得 Mi = O (mod span),那么根据 Mi+1 — Mi Xprime (modspan),当 k>i时,都有Mk = O (mod span),这样就不利于序列的随机性。为了避免这种情况,prime和MO都应该取值为不整除span的素数。而且素数prime和MO应较大,这样使得大多数的 Mi都大于span,有更好的随机性。
算法中当生成的数据大于MAX时,将回转到最小的数据,为Mi+1&4,MO是由seed 得出的素数,故Mi + I是变化的,这里与的数值不宜过小,否则回转数据的选择面太小,也不宜过大,否则将使得O与回转数据间过多数据失去选择机会,都不利于随机性。所以这里与的数值选定为4。
在测试中,有时不想对非规格化数进行测试,故不用产生这样的数据,上述算法只需做如下两点改动(I)将total改为total — 2p_l + I ; (2)第⑦步中,如果Μ +1&4 O, 将“Bi+2的内存表示一Mi+1&4”,改为“Bi+2的内存表示一Mi+1&4 (1 (p — I))”。
步骤S306 :判断是否达到最大,如果是执行步骤S307 ;否则,执行步骤S311 ;
步骤S307 :判断数据是否已满,如果是执行步骤S312 ;否者执行步骤S308 ;
步骤S308 :根据要求取非数;
步骤S309 :设置卷回标志;
步骤S310 :置取数点为0,返回执行步骤S303 ;
步骤S311 :是否到达起点;
步骤S312 :对所有数据乱序;
步骤S313:结束。
本申请实施例中取数的过程为一循环取数的过程,如在
区间内,选定起点为C,C为
区间内的任意一浮点数,从浮点数C开始,依次进行取数,当取到某一数值,且该数值小于MAX,而此时取得的浮点数个数满足要求,则停止取数。
若取到某一数值,该数值大于MAX,且取得浮点数的个数不满足取数个数时,按照预设要求取非数,重新确立取数起点,从O点开始取浮点数,直至取得浮点数的个数满足要求为止。
或者,重新确立取数起点后,从O开始取浮点数,取得某一浮点数的值在预设范围内接近C值时,停止取数,完成取数过程。
上述随机数产生算法得到的数据序列是有一定大小顺序的,适合于单个操作数的指令测试,如平方根指令。对于浮点乘法等运算,有两个操作数,需要两个这样的随机数序列,如果不将每个序列重新排列,所取到的每组操作数之间就有一定的相关性,不利于随机测试。下面就有了将顺序序列乱序的算法。
乱序算法的主要思想序列的总个数是N,需要一个M〈N,使得M与N互素。第i个数是从序列的a + iXM (mod N)处取得。这样取出的N个数就是一个较无序的序列。
当N相同时,一般M由算法已固定,这时就要对a进行改变。如果a也固定,那么两组浮点数虽然各自是乱序,但是他们的数据都是从原顺序序列的相同位置取的数据,所以这两组数之间还存在一定的相关性。可以用时间函数来给a赋值,这样,不同的时间给相同的序列排的序都是不同的。
通过随机数序列就可以对浮点运算进行随机测试。
本申请实施例提供的浮点随机数的生成方法,满足三个条件第一、可调节性,通过给定不同随机数选取跨度来控制随机数的个数N,达到调节测试程序运行时间长短的目的。第二、随机性,即通过给定不同的种子seed,迫使每次测试的数据不同。第三、遍历性,即不管给定什么种子和跨度,随机数都要覆盖到不同的数量级,当种子与跨度为一定的值时,能几乎遍历所有范围的浮点数。
对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
与上述本申请一种浮点随机数的生成方法实施例I所提供的方法相对应,参见图 4,本申请还提供了一种浮点随机数的生成系统的实施例I,在本实施例中,该微处理器可以包括
设定单元401,用于设定浮点随机数的生成区间、生成起点及生成个数;
确定单元402,用于依据所述生成区间及所述生成个数确定取数跨步参数;
选取单元403,用于以所述生成起点为初始点,所述取数跨步参数为选取标准, 在所述生成区间中依次选取浮点数;当选取的浮点数个数与所述生成个数相等时,停止取数;
乱序单元404,用于将选取的浮点数序列进行乱序操作,生成浮点随机数。
本申请实施例提供的浮点随机数的生成系统中,所述选取单元403包括
确定子单元405,用于确定所述生成区间内浮点数的总个数;
计算子单元406,用于求取所述总个数除以所述生成个数的结果值,并依据预设的计算规则对所述结果值进行计算,获得所述取数跨步参数。
选取子单元407,用于将所述生成起点作为当前起始浮点数,选取所述起始浮点数后的第二浮点数;所述第二浮点数在所述生成区间中的位置编码与所述当前起始浮点数的位置编码的差值与所述取数跨步参数的值相等;
判断子单元408,用于判断所述第二浮点数的值是否大于所述生成区间中浮点数的最大值。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。 对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如R0M/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备 (可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
以上对本申请所提供的一种浮点随机数生成方法及系统进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想, 在具体实施方式
及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
权利要求
1.一种浮点随机数的生成方法,其特征在于,包括 设定浮点随机数的生成区间、生成起点及生成个数; 依据所述生成区间及所述生成个数确定取数跨步参数; 以所述生成起点为初始点,所述取数跨步参数为选取标准,在所述生成区间中依次选取浮点数;当选取的浮点数个数与所述生成个数相等时,停止取数; 将选取的浮点数序列进行乱序操作,生成浮点随机数。
2.根据权利要求I所述的方法,其特征在于,所述依据所述生成区间及所述生成个数确定取数跨步参数包括 确定所述生成区间内浮点数的总个数; 求取所述总个数除以所述生成个数的结果值; 依据预设的计算规则对所述结果值进行计算,获得所述取数跨步参数。
3.根据权利要求I所述的方法,其特征在于,所述在生成区间中依次选取浮点数,当选取的浮点数个数与所述生成个数相等时,停止取数; 包括 将所述生成起点作为当前起始浮点数,选取所述起始浮点数后的第二浮点数;所述第二浮点数在所述生成区间中的位置编码与所述当前起始浮点数的位置编码的差值与所述取数跨步参数的值相等; 判断所述第二浮点数的值是否大于所述生成区间中浮点数的最大值;当不大于时,将所述第二浮点数作为新的当前起始浮点数;直至选取的浮点数个数与所述生成个数相等时,停止取数。
4.根据权利要求3所述的方法,其特征在于,还包括 当判断所述第二浮点数的值大于所述生成区间中浮点数的最大值时,判断选取的浮点数的个数是否与所述生成个数相等;当不相等时,将所述生成区间中浮点数的最小值作为当前起始浮点数;直至选取的浮点数个数与所述生成个数相等时,停止取数。
5.根据权利要求4所述的方法,其特征在于,还包括 将所述生成区间中浮点数的最小值作为当前起始浮点数,进行选数时,判断所述第二浮点数的值是否大于所述生成起点; 当大于时,停止取数。
6.根据权利要求4所述的方法,其特征在于,还包括 判断选取的浮点数的个数是否与所述生成相等;当不相等时,将所述第二浮点数进行舍弃。
7.根据权利要求I所述的方法,其特征在于,在选取浮点数的过程中,每选取一浮点数,为该浮点数随机分配赋值符号。
8.一种浮点随机数生成系统,其特征在于,包括 设定单元,用于设定浮点随机数的生成区间、生成起点及生成个数; 确定单元,用于依据所述生成区间及所述生成个数确定取数跨步参数; 选取单元,用于以所述生成起点为初始点,所述取数跨步参数为选取标准,在所述生成区间中依次选取浮点数;当选取的浮点数个数与所述生成个数相等时,停止取数; 乱序单元,用于将选取的浮点数序列进行乱序操作,生成浮点随机数。
9.根据权利要求8所述的系统,其特征在于,所述选取单元包括 确定子单元,用于确定所述生成区间内浮点数的总个数; 计算子单元,用于求取所述总个数除以所述生成个数的结果值,并依据预设的计算规则对所述结果值进行计算,获得所述取数跨步参数。
10.根据权利要求8所述的系统,其特征在于,所述选取单元包括 选取子单元,用于将所述生成起点作为当前起始浮点数,选取所述起始浮点数后的第二浮点数;所述第二浮点数在所述生成区间中的位置编码与所述当前起始浮点数的位置编码的差值与所述取数跨步参数的值相等; 判断子单元,用于判断所述第二浮点数的值是否大于所述生成区间中浮点数的最大值。
全文摘要
本申请提供了一种浮点随机数的生成方法,包括设定浮点随机数的生成区间、生成起点及生成个数;依据所述生成区间及所述生成个数确定取数跨步参数;以所述生成起点为初始点,所述取数跨步参数为选取标准,在所述生成区间中依次选取浮点数;当选取的浮点数个数与所述生成个数相等时,停止取数;将选取的浮点数序列进行乱序操作,生成浮点随机数。与所述方法相对应的,本申请还提供了一种浮点随机数的生成系统。本申请实施例提供的浮点随机数生成方法及系统,通过设定不同的操作参数使得产生的浮点随机数的跨度均匀,产生的随机数可以覆盖到不同的数量级,随机数的随机性强。
文档编号G06F7/58GK102981799SQ20121044079
公开日2013年3月20日 申请日期2012年11月6日 优先权日2012年11月6日
发明者王俊, 李岱峰, 王丽一, 谭坚, 吴臻, 相陈伟 申请人:无锡江南计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1