计算机产生伪随机数代码的周期是多少

大周期伪随机数-学术百科-知网空间
大周期伪随机数
大周期伪随机数
pseudo random number产生伪随机数的一种方法.用F2表示只含0和1的二元有限域,其中的加法定义为   (1)...这个方法产生的伪随机数序列的周期取决于基本列的周期.由式(2)看出,基本列的最大可能周期为2I-1.基本列达到最大可能周期的充分必要条件是,其关联
与"大周期伪随机数"相关的文献前10条
为了克服当前所生成的伪随机数周期小、每个随机数仅能出现1次而不能重复的缺点,本文提出了一种生成伪随机数的新方法,称为改进的混合同余法。
为了满足密码学对高质量的随机序列的需求,提出一种新的基于2-by-n元胞自动机的伪随机数发生器。并着重于最大周期的要求,首先介绍了在细胞自动机中与之相关的机制,随后给出了基于2-
针对zlogistic这类特殊的混沌映射,实现了有限位计算精度下其真实演化轨道的精确计算.将该生成轨道的二值粗粒化输出用作伪随机序列,很大程度上保留了定义在实数域上混沌随机数发生
基于传统的特征多项式和寄存器设计的伪随机数发生器具有速度慢、生成代价高和周期短等缺点,通过非线性Logistic映射系统和分段映射描述了复合混沌系统的基本性质,设计了一种基于复合
本文给出了一种产生对数正态分布伪随机数的算法以及相应的检验方法,产生的均匀分布随机序列,经近似抽样产生正态分布的随机数,再经变换抽样最终产生对数正态分布的随机序列。采用卡方检验验
正 随机信号大致可分为连续信号和脉冲信号两大类。前者通常称为噪音。脉冲信号中有一类双极性非周期脉冲序列,称为随机数。还有一类按其参数和使用范围与随机信号很接近的周期脉冲序列称为伪
"大周期伪随机数"的相关词
快捷付款方式
订购知网充值卡
<font color="#0-819-9993
<font color="#0-
<font color="#0-计算机产生随机数的原理是什么?是绝对的随机吗?如题,请回答
问:怎样产生随机数?答:在计算机中并没有一个真正的随机数发生器,但是可以做到使产生的数字重复率很低,这样看起来好象是真正的随机数,实现这一功能的程序叫伪随机数发生器.有关如何产生随机数的理论有许多,如果要详细地讨论,需要厚厚的一本书的篇幅.不管用什么方法实现随机数发生器,都必须给它提供一个名为“种子”的初始值.而且这个值最好是随机的,或者至少这个值是伪随机的.“种子”的值通常是用快速计数寄存器或移位寄存器来生成的.下面讲一讲在C语言里所提供的随机数发生器的用法.现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数.它们就是rand()和srand()函数.这二个函数的工作过程如下:1) 首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535;2) 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间)3) 根据需要多次调用rand(),从而不间断地得到新的随机数;4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果.这个过程看起来很简单,问题是如果你每次调用srand()时都提供相同的种子值,那么,你将会得到相同的随机数序列,这时看到的现象是没有随机数,而每一次的数都是一样的了.例如,在以17为种子值调用srand()之后,在首次调用rand()时,得到随机数94.在第二次和第三次调用rand()时将分别得到2,这些数看上去是很随机的(尽管这只是一个很小的数据点集合),但是,在你再次以17为种子值调用srand()后,在对于rand()的前三次调用中,所得的返回值仍然是在对94,,并且此后得到的返回值仍然是在对rand()的第一批调用中所得到的其余的返回值.因此只有再次给srand()提供一个随机的种子值,才能再次得到一个随机数.下面的例子用一种简单而有效的方法来产生一个相当随机的“种子”值----当天的时间值:
为您推荐:
其他类似问题
扫描下载二维码8位单片机产生伪随机数的算法;8位单片机很多地方需要随机数,比如游戏的洗牌,可;伪随机数函数总是返回可预知的数字,像抛骰子,如果;3,1,5,1,4,6,5,4,6,5,4,5,;问题的关键是从这序列的哪个点(数字)开始取数?这;在6502上,8位或16位随机数是最常用的,函数;1.为了取得新的种子(也就是从序列开始的那个点的;2.所得结果然后和第二个常数c
8位单片机产生伪随机数的算法
8位单片机很多地方需要随机数,比如游戏的洗牌,可在timer中取数,但是随机数质
量不高。随机数是一个既简单又复杂的问题,这里的例子使用了众所周知的线性叠加法,没
有完美的方法产生随机数,不过线性叠加法是一个合适的方法,彻底解决8位机随机数的问
伪随机数函数总是返回可预知的数字,像抛骰子,如果抛足够多次,那么我们得到了一
个足够长的数字序列,
3,1,5,1,4,6,5,4,6,5,4,5,6,1,3,2,1,6,4,6,5,4,3,2,1,3,2,1,4,2,3,1,3......
如果从序列中一个接一个的取出数字,那么数字就看似随机。
问题的关键是从这序列的哪个点(数字)开始取数?这个开始的点(数字)叫做种子。
注意,如果从相同的点(种子)开始,将会得到相同的数字,这是因为我们是从固定的序
列中取数字(所以叫伪随机)。但这却是一个有用的特性,我们可以每次从不同的点取数,即
改变种子!
在6502上,8位或16位随机数是最常用的,函数返回一个32位的数字,范围0~2^32。名
词&线性叠加&听起来容易范晕, 其实只涉及二个内容:乘法和加法。三个步骤:
1. 为了取得新的种子(也就是从序列开始的那个点的数字),旧的种子和一个常数A相乘,
2. 所得结果然后和第二个常数c相加。
3. 新的种子是结果的低32位(记住,这个函数返回32位数字)。保留低32位很重要,用来获
得下一个种子。
种子 = A * 种子 + C
此公式在几何图中表示一条直线,而且新种子由旧种子反复相加得来,所以叫线性叠加。
随机数函数的关键在于选择优秀的&常数A&(也叫乘数A),其实也就是选择了一个固定
的数字序列。&常数c&,不像乘数A那样重要,但是它一定是个奇数。事实上, c可选1,而
且这是例程所使用的,因为它会简化计算。
注意,奇数(旧的种子)乘奇数(乘数A)是奇数,再加奇数(常数c)将会是一个偶数;偶数
(旧的种子)乘奇数(乘数A),加奇数(常数c)将会是一个奇数。如此种子将会在奇数和偶数之
间转变。因为种子的变化足够随机,所以新种子的值可以作为8位或16位随机数。
子程序F_RandomSeed,计算 &种子 = 乘数 * 种子+1& (记得,c=1)。有三个版本:
(1) 快速版本, 速度快,但占用Rom多。
(2) 兼顾版本,速度和占用Rom适中,空间和速度是在另外二个版本之间。
兼顾版B, 使用了另一个神奇的数字66066(10进制).
(3) 最小版本,速度慢,但占用Rom小。
三个版本中使用的乘数进制)=19660D(16进制),是从&&计算机程序的艺术,
第2册&&一书中选出,这是一个神奇的数字,经过论证和测试,这个数字对产生随机数至
关重要。想进一步研究的朋友可以阅读原著(参考资料2),书中以特别专业的数学方法讨论
了随机数问题。这里只是应用了其中的两个常数进制)和69069(10进制),这里不
作讨论,因为篇幅问题是借口,其实自己没弄懂。
;============================================================================== 快速版本
;==============================================================================
丰收先要选好种子,育种很重要,同样,获得随机种子是重要的一步。
种子变量设定在零页RAM可以提高速度。
程序F_RandomSeed计算 1664525*种子,需要5个字节(R_Seed0~R_Seed3,R_Temp)。
F_GeneratTables预先计算1664525*X(x=0~255),生成四个256字节的列表T3,T2,T1,T0.
T3,X = 表T3的第X字节 = 1664525 * X的第31~24位(X = 0 to 255)
T2,X = 表T2的第X字节 = 1664525 * X的第23~16位(X = 0 to 255)
T1,X = 表T1的第X字节 = 1664525 * X的第15~ 8位(X = 0 to 255)
T0,X = 表T0的第X字节 = 1664525 * X的第 7~ 0位(X = 0 to 255)
对于单片机来说 使用1K RAM很夸张,也可以不用F_GeneratTables,直接把随机数表存
;============================================================================== 伪随机数函数的线性叠加
; 计算 Seed = 1664525 * Seed + 1
;------------------------------------------------------------------------------
; R_Seed0 &--- 种子0
; R_Seed1 &--- 种子1
; R_Seed2 &--- 种子2
; R_Seed3 &--- 种子3
; 种子0 ---& R_Seed0
; 种子1 ---& R_Seed1
; 种子2 ---& R_Seed2
; 种子3 ---& R_Seed3
;------------------------------------------------------------------------------ 为提高速度R_Seed0,R_Seed1,R_Seed2,R_Seed3,R_Temp选零页Ram
; 每张列表从Rom地址 xx00h 处开始 或在Rom中
;------------------------------------------------------------------------------ 空间: 程序58个字节
; 列表1024个字节
; 速度: 调用F_RandomSeed需要94个周期
;==============================================================================
F_RandomSeed:
CLC ; 计算低32位:
LDX R_Seed0 ; 1664525*($100* R_Seed1+ R_Seed0)+1
LDY R_Seed1
STA R_Seed0
STA R_Seed1
STA R_Temp
TAY ; 把字节3留在Y中
CLC ; 加低32位:
LDX R_Seed2 ; 1664525*($10000* R_Seed2)
LDA R_Temp
STA R_Seed2
LDX R_Seed3 ; 加低32位:
ADC T0,X ; 1664525*($1000000* R_Seed3)
STA R_Seed3
;============================================================================== 产生T0,T1,T2和T3列表,使用F_GeneratTables,列表在ram中
;==============================================================================
F_GeneratTables:
LDX #0 ;=0
LDA T0-1,X ;把1664525加入
ADC #$0D ;字节0
LDA T1-1,X
ADC #$66 ;字节1
LDA T2-1,X
ADC #$19 ;字节2
LDA T3-1,X
ADC #$00 ;字节3
INX ;进位C=0退出
;------------------------------------------------------------------------------ 生成的列表,如果不要F_GeneratTables,可以直接将此表放在Rom中
;------------------------------------------------------------------------------1664525 * X的第31~24位(X = 0 to 255)
.DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01
.DB $01,$01,$01,$01,$01,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$03
.DB $03,$03,$03,$03,$03,$03,$03,$03,$03,$04,$04,$04,$04,$04,$04,$04
.DB $04,$04,$04,$05,$05,$05,$05,$05,$05,$05,$05,$05,$05,$06,$06,$06
.DB $06,$06,$06,$06,$06,$06,$06,$07,$07,$07,$07,$07,$07,$07,$07,$07
.DB $07,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$09,$09,$09,$09,$09
.DB $09,$09,$09,$09,$09,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0B
.DB $0B,$0B,$0B,$0B,$0B,$0B,$0B,$0B,$0B,$0C,$0C,$0C,$0C,$0C,$0C,$0C
.DB $0C,$0C,$0C,$0C,$0D,$0D,$0D,$0D,$0D,$0D,$0D,$0D,$0D,$0D,$0E,$0E
.DB $0E,$0E,$0E,$0E,$0E,$0E,$0E,$0E,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
.DB $0F,$0F,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$11,$11,$11,$11
.DB $11,$11,$11,$11,$11,$11,$12,$12,$12,$12,$12,$12,$12,$12,$12,$12
.DB $13,$13,$13,$13,$13,$13,$13,$13,$13,$13,$14,$14,$14,$14,$14,$14
.DB $14,$14,$14,$14,$15,$15,$15,$15,$15,$15,$15,$15,$15,$15,$16,$16
.DB $16,$16,$16,$16,$16,$16,$16,$16,$17,$17,$17,$17,$17,$17,$17,$17
.DB $17,$17,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$19,$19,$19,$19
;1664525 * X的第23~16位(X = 0 to 255)
.DB $00,$19,$32,$4C,$65,$7E,$98,$B1,$CB,$E4,$FD,$17,$30,$4A,$63,$7C
.DB $96,$AF,$C9,$E2,$FB,$15,$2E,$48,$61,$7A,$94,$AD,$C7,$E0,$F9,$13
.DB $2C,$46,$5F,$78,$92,$AB,$C5,$DE,$F7,$11,$2A,$44,$5D,$76,$90,$A9
.DB $C3,$DC,$F5,$0F,$28,$42,$5B,$74,$8E,$A7,$C1,$DA,$F3,$0D,$26,$40
.DB $59,$72,$8C,$A5,$BF,$D8,$F1,$0B,$24,$3E,$57,$70,$8A,$A3,$BD,$D6
.DB $EF,$09,$22,$3C,$55,$6E,$88,$A1,$BB,$D4,$ED,$07,$20,$3A,$53,$6C
.DB $86,$9F,$B9,$D2,$EB,$05,$1E,$38,$51,$6A,$84,$9D,$B7,$D0,$E9,$03
包含各类专业文献、行业资料、专业论文、各类资格考试、幼儿教育、小学教育、应用写作文书、外语学习资料、文学作品欣赏、生活休闲娱乐、8位单片机产生伪随机数的算法(6502版)89等内容。 
 实验工具: C++编程模拟 实验原理: 随机数产生原理:通过数学算法产生伪随机数来,模拟随机数产生。随机 数序列具有循环周期性。可以证明,任何 产生伪随机数的算法总会...  FPGA 产生基于 LFSR 的伪随机数 1.概念 通过一定的算法对事先选定的随机种子(seed)做一定的运算可以得到一组人 工生成的周期序列, 在这组序列中以相同的概率...  常见的随机数发生器有两种:使用数学算法的伪随机数...产生真随机数源,收集数据,通过 AVR 单片机 ATmega...采集的数据综合,最后产生 1 个 8 位的真随机数。...  线性同余 产生伪随机数_专业资料。线性同余 产生伪随机数自己领悟把 一.计算机中随机数的产生 现在,在计算机,用来产生随机数的算法是“线性同余”法。所谓线性同余...  系统仿真或加密算法中常需要产生满足一定分布函数的伪随机数, 高级程序设计语言 摘要: 中的库函数采用线性同余法产生一个在[0,32767] 服从均匀分布的伪随机数,但...  ATmega1 28 单片机的真随机数发生矗时间:2009-12-...常见的随机数发生器有两种: 使用数学算法的伪随机数...为了产生 1 个 8 位数据,设计了 C 语言程序控制...  纯线性同余随机数生成器 1. 线性同余随机数生成器介绍: 古老的 LCG(linear congruential generator)代表了最好最朴素的伪随机数产生器算法。主要原 因是容易理解,...  重庆理工大学 &统计计算&论文 随机数的产生与检验摘要本文通过对常用的随机数的产生方法简单的分析和理论上的验证,对比研究 随机数的产生机理以及产生的随机数的好坏...  (n+1) 一般将 c 取得很大,可产生 0 到 c-1 之间的伪随机数 该算法的一...[10]; // 预定义 10 位长度的字符数组,单片机为 8 位 该不会超过这个范围...

我要回帖

更多关于 伪随机数产生器 的文章

 

随机推荐