Algorithm 如何为随机数生成器生成算法?

Algorithm 如何为随机数生成器生成算法?,algorithm,random,Algorithm,Random,根据我的一位老师的说法,为了做到这一点,你需要制作两个带有数字的数组,拥有几个小数。一个正数组和一个负数组 数组1[0]=例如1.5739 数组2[0]=例如-5.31729 然后找到当前时间 201305220957或2013年5月22日上午9:57 用这个等式: (20130521647*1.5739)——5.31729 -然后使用绝对值并四舍五入到小数点后1.0位,就得到了数字 在大多数生成器中,值确实取决于时间吗?您需要什么级别的随机性 看看你需要的随机性水平是什么 看看前面的底线——生

根据我的一位老师的说法,为了做到这一点,你需要制作两个带有数字的数组,拥有几个小数。一个正数组和一个负数组

数组1[0]=例如1.5739

数组2[0]=例如-5.31729

然后找到当前时间

201305220957或2013年5月22日上午9:57

用这个等式:

(20130521647*1.5739)——5.31729

-然后使用绝对值并四舍五入到小数点后1.0位,就得到了数字


在大多数生成器中,值确实取决于时间吗?

您需要什么级别的随机性


看看你需要的随机性水平是什么


看看前面的底线——生成随机数真的很难做到正确,并且严重地伤害了一些非常聪明的人(例如)。普通人不应该尝试创建自己的RNG算法。它需要数论、概率统计和数值计算方面的专业知识。除非你在这三个领域都有资格,否则你最好使用那些有资格的人开发的算法。如果你想知道如何做正确的,你可以在和找到很多好的信息


坦率地说,你的老师对这个话题完全一无所知。

最重要的一点是,生成随机数真的很难做到正确,并且严重地伤害了一些非常聪明的人(例如)。普通人不应该尝试创建自己的RNG算法。它需要数论、概率统计和数值计算方面的专业知识。除非你在这三个领域都有资格,否则你最好使用那些有资格的人开发的算法。如果你想知道如何做正确的,你可以在和找到很多好的信息


坦率地说,你的老师对这个话题一无所知。

如果你需要生成用于加密或统计目的的随机数,你需要一个经过充分研究的生成器。我喜欢的是Mersenne Twister,它具有非常好的统计特性,运行速度快,易于编码

如果您只需要一个合理的随机生成器(例如,使事情在游戏中看起来随机),您可以使用经典的“线性同余生成器”,它编写起来非常简单,并生成非常随机的输出。(重型计算不安全)

LCG发生器:

int seed = 0x333; // chose any number.

int random() { seed = ( seed * 69069 ) + 1;  return seed; }
有几个数字可以代替69069。但不要自己选。如果您不喜欢69069,请在此选择一个


如果您需要生成用于加密或统计目的的随机数,您需要得到一个经过充分研究的生成器。我喜欢的是Mersenne Twister,它具有非常好的统计特性,运行速度快,易于编码

如果您只需要一个合理的随机生成器(例如,使事情在游戏中看起来随机),您可以使用经典的“线性同余生成器”,它编写起来非常简单,并生成非常随机的输出。(重型计算不安全)

LCG发生器:

int seed = 0x333; // chose any number.

int random() { seed = ( seed * 69069 ) + 1;  return seed; }
有几个数字可以代替69069。但不要自己选。如果您不喜欢69069,请在此选择一个


返回的值取决于大多数生成器的种子值,种子可能与时间相关,也可能与时间无关,这取决于用户认为合适的程度。有两个主要组件:一个函数接受一些输入并产生看似随机的输出(尽管在相同的输入下总是提供相同的结果),然后有一个种子,它是一种随机数据,你输入到后一个函数中。该函数(在计算机上)是一个伪随机生成器。种子可以从任何足够随机的来源中拾取。当前时间是一个非常糟糕的候选者。不是以这种明显的方式,但许多发电机是根据系统中某些中断发生的时间或间隔来播种的。开机几分钟后,通常情况下是“足够不可预测的”。“在大多数生成器中,值是否真的取决于时间?”没有这里那么多。我的大脑刚刚超载。。。如果时间静止,RNG会产生什么?如果时间静止,如果不能在一个时间间隔内对外部源进行采样,“真正随机”数字生成器是否可以工作?返回的值取决于大多数生成器的种子值,种子可能与时间有关,也可能与时间无关,这取决于用户认为合适。它有两个主要组成部分:一个函数接受一些输入并产生看似随机的输出(尽管在相同的输入下总是提供相同的结果),然后是一个种子,它是某种随机数据,您可以输入到后一个函数中。该函数(在计算机上)是一个伪随机生成器。种子可以从任何足够随机的来源中拾取。当前时间是一个非常糟糕的候选者。不是以这种明显的方式,但许多发电机是根据系统中某些中断发生的时间或间隔来播种的。开机几分钟后,通常情况下是“足够不可预测的”。“在大多数生成器中,值是否真的取决于时间?”没有这里那么多。我的大脑刚刚超载。。。如果时间静止,RNG会产生什么?如果时间静止,如果一个“真正随机”的数字发生器不能在一个时间间隔内对外部源进行采样,它能起作用吗?我出于好奇提出了这个问题。基本上,如果我在一个程序中掷骰子得到3分,我想知道我是如何得到3分的。我出于好奇提出了这个问题。基本上,如果我在一个程序中掷骰子得到了3,我想知道我是如何得到3的。你忘了+1这个术语。。。请小心,你发布的生成器有周期2^30和初始种子1,这不是很好,它还有其他缺陷。如果你要发布一个代码片段,至少要正确地复制算法:[这是一个很好的例子,说明如何正确地获得RNG。1)正如@Thomas所指出的,你忽略了添加一个。2)你依赖位溢出来完成%o