6

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

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

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

4

5 回答 5

6

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

于 2013-05-25T03:57:10.140 回答
4

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

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

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

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

更多详情请参考以下线程:Predict the Seed of Javascript's Math.random

于 2013-05-25T04:21:21.390 回答
3

当然,身份功能怎么样:

function getMappedRandom(random){ return random; } 

我不确定您为什么要进行这种转换,但就随机性而言,它不一定会使它变得更好。

随机数发生器

于 2013-05-25T04:41:17.903 回答
2

我相信您需要的称为单向哈希函数。尝试 hex_md5() 或 hex_sha1()。

于 2013-05-25T04:20:11.117 回答
0

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

这可能对您有用:

http://davidbau.com/archives/2010/01/30/random_seeds_coded_hints_and_quintillions.html http://davidbau.com/encode/seedrandom.js

于 2013-05-25T23:24:39.030 回答