随机数

herman说:计算机用的是伪随机数
herman说:一般来说,是一个函数
herman说:rand(number)
herman说:中间的number被称为种子
dhew说:我知道大概的指令
dhew说:问题是
dhew说:既然有一个逻辑来选取这个数字。
herman说:大体上是一个原则问题
dhew说:那么,为什么还能算随机呢?
dhew说:这个逻辑是根据什么来判断的呢?时钟?还是什么?
herman说:就是说,取到的数有一个概率均分问题
herman说:也就是说,放什么数进去和取出来,在大数情况下,概率要比较均匀
herman说:所以呢,一般传1,2,3,4,5进去
herman说:那种如果结果是整数的话(这样好理解一点)
herman说:mod 1,mod 2,mod3之类的
herman说:会每个都有一个之类的
herman说:举一个最简单的随机数例子
herman说:这是运算最快的一个
Amy说:所以还是有运算过程,不能说是真正的随机数了?
herman说:Cn+1=Cn*A+b
herman说:写错了,晕
herman说:对的
herman说:计算机没有真正的随机数
herman说:Cn+1=(Cn*A)%b
herman说:其中A和B是经验值
herman说:就是为了均分服务的
Amy说:果然是高深的学问啊~~
herman说:VC6用的就是这个函数
herman说:笑
herman说:Cn+1就是你取到的随机数,Cn其实就是你送进去的种子
Amy说:数学嘎么差得我突然想到这个问题,果然也是个随机事件啊
herman说:如果你不送种子,就会以上一次生成的随机数为种子
herman说:
herman说:就是这样。
dhew说:A 和 B 一般怎么取的呢?
dhew说:经验值……
herman说:有各种取法
dhew说:这个说法,总觉得有点含糊。
herman说:目前常用的一种
dhew说:举一个例子就好……
herman说:A是7的5次方
Amy说:
herman说:B是2的31次方减1
dhew说:…………
dhew说:明白了。
herman说:刚好可以生成一个int32的随机数

发表评论

电子邮件地址不会被公开。 必填项已用*标注