关于javascript:从另一个号码生成一个随机数

Generate a random number from another number

在javascript中,是否可以从另一个数字生成随机数?

我正在尝试为我的一个分形地形生成器实现一个可预测的随机数生成器。我已经知道可以使用math.random()生成一个随机数,但是我想创建一个随机数生成器,它只为每个输入生成一个输出。(例如,predictableRandomGenerator(1)总是产生相同的结果,这不一定与输入相同。)

那么,是否可以从另一个数字生成一个随机数,其中每个输入的输出总是相同的?


可以使用校验和生成器(如MD5或SHA-1)为每个输入生成单个伪随机输出。sha-1将从作为输入输入的每个字符串中生成一个随机数,并且每个输出将只生成一个输入。(很可能其他校验和生成器也适用于此目的,因为校验和生成器只为输入的每个输入生成一个输出)。


是的,这是可能的。不过,您需要编写自己的伪随机数生成器。

看,计算机不能真正产生随机数。但是,您可以使用一种算法来创建一个看起来是随机的数字序列。

该算法通常被赋予一个种子,每个种子都会产生一个不同的随机数序列。

最常见的算法是线性同余伪随机数发生器,由D.H.Lehmer定义,Donald E.Knuth在《计算机编程技术》第2卷:半数值算法第3.2.1节中描述。

有关更多详细信息,请参阅以下线程:Predict the seed of javascript's math.random


当然,身份识别功能如何:

1
function getMappedRandom(random){ return random; }

我不知道你为什么想要这种转变,但就随机性而言,它并不一定能使它变得更好。

Random Number Generator


我相信你需要的是所谓的单向散列函数。尝试hex_md5()或hex_sha1()。


如果您需要一个地形生成器的prng,那么我假设您需要一个种子随机数生成器,它为一个给定的种子复制伪随机数序列;这样每个种子都会创建一个单独的、不同的地形,稍后可以通过提供相同的种子来重建。

这可能对您有用:

http://davidbu.com/archives/2010/01/30/random_seeds_coded_hints_and_quintillions.htmlhttp://davidbu.com/encode/seedrandom.js网站