在JavaScript中,是否可以从另一个数字生成随机数?
我正在尝试为我的一个分形地形生成器实现一个可预测的随机数生成器。我已经知道可以使用Math.random()生成一个随机数,但我想创建一个随机数生成器,为每个输入生成一个输出。 (例如,predictableRandomGenerator(1)
将始终产生相同的结果,这不一定与输入相同。)
那么可以从另一个数字生成一个随机数,其中每个输入的输出总是相同的吗?
答案 0 :(得分:6)
您可以使用校验和生成器(如MD5或SHA-1)为每个输入生成单个伪随机输出。 SHA-1将从输入的每个字符串生成一个随机数,每个输出将产生一个输入。 (这可能是任何其他校验和生成器也适用于这样的目的,因为校验和生成器为输入的每个输入生成恰好一个输出。)
答案 1 :(得分:4)
是的,有可能。但是,您需要编写自己的伪随机数生成器。
请注意,计算机无法真正生成随机数。但是,您可以使用一种算法来创建一个看似随机的数字序列。
该算法通常会给出一个种子,每个种子都会导致算法生成不同的随机数序列。
最常见的算法是线性同余伪随机数发生器,由D. H. Lehmer定义,由Donald E. Knuth在“计算机程序设计的艺术”第2卷:精神数学算法,第3.2.1节中描述。
有关详细信息,请参阅以下主题:Predict the Seed of Javascript's Math.random
答案 2 :(得分:3)
当然,身份功能怎么样:
function getMappedRandom(random){ return random; }
我不确定你为什么要这种转变,但就随机性而言,它并不一定能让它变得更好。
答案 3 :(得分:2)
我相信你所需要的是单向散列函数。尝试hex_md5()或hex_sha1()。
答案 4 :(得分:0)
如果您需要PRNG用于地形生成器,那么我假设您需要一个种子随机数生成器来再现给定种子的伪随机数序列;这样每个种子都会创建一个独立的,独特的地形,以后可以通过提供相同的种子来重建。
这可能对您有用:
http://davidbau.com/archives/2010/01/30/random_seeds_coded_hints_and_quintillions.html http://davidbau.com/encode/seedrandom.js