| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1685 人关注过本帖
标题:随机原理
只看楼主 加入收藏
THE老王
Rank: 2
等 级:论坛游民
威 望:1
帖 子:9
专家分:27
注 册:2020-4-4
结帖率:50%
收藏
已结贴  问题点数:5 回复次数:4 
随机原理
众所周知,Rnd是一个伪随机函数,可是它的内部原理是什么?它是怎样取数的?
搜索更多相关主题的帖子: 内部 随机 随机函数 原理 
2020-04-24 20:12
时光流逝
Rank: 4
来 自:北京
等 级:业余侠客
威 望:8
帖 子:94
专家分:297
注 册:2019-11-16
收藏
得分:0 
Rnd是根据系统内部时钟的值来取伪随机数的
2020-04-25 13:18
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:3 
所谓伪随机,就是结果可以预料的一个数据系列。目前常用的方法是线性同余函数产生,这个系列是固定的,所以在不做特殊设定的情况下,你每次运行程序取得的随机数据不会变化,和系统时间无关。为了让伪随机像真随机,随机函数引入种子概念,种子可以形象地理解为从第几个数开始读取这个系列的数据,这时可以把系统时间引入做种子,因为你每次运行程序的时间不一样,所以每次得到不同的随机数,就像真随机了。你也可以不引入时间,比如你可以把第一次按键或鼠标移动的路径作为种子,就更像随机数了
你也可以用别的方法产生随机数,比如你可以无限制地把圆周率运算下去,按10位数据的读取顺序读取下去,这样你也可以的到一个伪随机数据系列,你也可以引入种子概念,不是每次从31415926开始读,如果种子为1,就从14159265、35897932、3846264、3383279...这样取,是不是非常像随机数?

能编个毛线衣吗?
2020-04-25 14:05
ZHRXJR
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:125
帖 子:1034
专家分:5519
注 册:2016-5-10
收藏
得分:2 
Rnd 函数按微软官方的解释应该是:产生一系列大于0小于1的随机数,标准的格式是 Rnd(0),其中 0 是种子,默认的 Rnd 的种子就是 0,因此 Rnd 与 RND(0) 是一样的。
它不是按照系统时间产生不同的随机数,运行 Rnd 在不同的时间可能产生的随机数可能是一样的。伴随 Rnd 函数还有一个函数 Randomize 函数是初始化随机数生成器,有了这个函数 Rnd 在生成随机数是按照系统时间给定种子而产生不同的随机数,一般来说,二个函数结合使用,产生的随机数重复的概率将比较小。
例如:
Randomize
NN = Int( Rnd * 9 + 1)   
生成1 到 10 之间的随机数,重复率就非常小。如果不使用 Randomize 函数,那么重复的几率将非常大,甚至可能生成一系列系统相同的随机数。

请不要选我!!!
2020-04-25 18:05
THE老王
Rank: 2
等 级:论坛游民
威 望:1
帖 子:9
专家分:27
注 册:2020-4-4
收藏
得分:0 
我已经找到了一种很好的随即方法,模拟人脑的随机系统。它对一系列时间、鼠标和键盘操作进行检测和保存成Integer。取数时用rnd取数并用rnd选择计算方式(+,-,*,/,Mod,^,And,Not,Or,Xor,Eqv,Imp)并进行多次计算后生成随机数,这样的随机性应当会大大增加并不容易被破译
2020-04-28 21:18
快速回复:随机原理
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036916 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved