你如何为随机数生成器制作算法?

时间:2013-05-22 14:10:26

标签: algorithm random

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

数组1 [0] =例如1.5739

数组2 [0] =例如-5.31729

然后你找到当前时间

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

使用这个等式:

(适用201305211647 * 1.5739) - 5.31729

- 然后你使用绝对值并舍入到小数点后的1.0,你有你的数字

在大多数发电机中,值是否依赖于时间?

3 个答案:

答案 0 :(得分:5)

提前做好准备 - 生成随机数字确实很难做到,并且严重烧伤了一些非常聪明的人(John Von Neumann为一个人)。普通人不应该尝试创建自己的RNG算法。它需要数论,概率和数学方面的专业知识。统计和数值计算。除非你符合所有三个领域的资格,否则你最好使用由人开发的算法。如果您想知道如何正确操作,可以在http://en.wikipedia.org/wiki/Random_number_generationhttp://en.wikipedia.org/wiki/Pseudorandom_number_generator找到很多好消息。

直截了当地说,你的老师对这个话题完全不了解。

答案 1 :(得分:0)

您需要的级别随机性是什么?

查看http://www.robertnz.net/true_rng.html

答案 2 :(得分:0)

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

如果你只需要一个合理随机的生成器 - 例如让游戏中的东西看起来随机 - 你可以使用经典的“线性全等生成器”,这是很容易编写并产生相当随机的输出。 (重载计算不安全)。

LCG发电机:

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

int random() { seed = ( seed * 69069 ) + 1;  return seed; }

您可以使用多个数字而不是69069.但不要选择自己的数字。如果你不喜欢69069,请从这里选择一个。

http://en.wikipedia.org/wiki/Linear_congruential_generator