Javascript 从另一个数字生成一个随机数

Javascript 从另一个数字生成一个随机数,javascript,random,Javascript,Random,在JavaScript中,是否可以从另一个数字生成一个随机数 我正在尝试为我的一个分形地形生成器实现一个可预测的随机数生成器。我已经知道可以使用Math.random()生成一个随机数,但我想创建一个随机数生成器,为每个输入生成一个输出。(例如,predictableRandomGenerator(1)将始终生成相同的结果,但不一定与输入相同。) 因此,是否可以从另一个数字生成一个随机数,其中每个输入的输出总是相同的?您可以使用校验和生成器(如MD5或SHA-1)为每个输入生成一个伪随机输出。S

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

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


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

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

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

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

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

该算法通常给出一个种子,每个种子导致算法生成的不同随机数序列

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


有关更多详细信息,请参阅以下线程:

当然,identity函数如何:

function getMappedRandom(random){ return random; } 
我不知道你为什么想要这种转换,但就随机性而言,它并不一定能让它变得更好


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

这可能适合您:


+1开放式问题:)你能给数学随机输入种子吗?然后,您应该始终获得相同的“随机”数序列(每个种子)。你可以拿第一个。但是请注意,这不是唯一的,而且
Math.random(x)
Math.random(y)
可能会产生相同的第一个“random”数。好的,显然您不能为Javascript
Math.random()
种子。。。但这可能会有所帮助:或多或少是这个的一个副本:另一个副本:使用现有的哈希函数(如SHA-1、SHA-2或SHA-3)可能更容易,而不是从头开始。这将简单地将输入作为输出返回。它仍然被认为是伪随机的吗?@AndersonGreen:顺便说一句,如果你是诚实的,你应该接受这个。这是对您提出的问题的最准确和最正确的回答。@thg435从技术上讲,这将被视为一种随机数生成器,但根据判断,将其输出作为输入返回的伪随机数生成器可能比大多数其他随机数生成器的“随机性”要小得多。也许我问题的原始措辞有误导性,因为它似乎暗示我希望随机数生成器将其输入作为输出。@AndersonGreen:问题是如何从另一个数字生成随机数,而答案
return 9
是完全正确的。随机性不适用于单个对象,因此一个数字与另一个数字一样随机。这只是一个数字序列,可以是随机的,也可以不是。@thg435,漫画不是原始答案的一部分。那是我加的。我认为看到原始回答者如何使用身份函数是合适的这里最大的警告是,像MD5和SHA-1这样的校验和算法本质上是设计得很慢的。您真正想要的是一个种子伪随机数生成算法。这里的关键词是种子,这是你提到的“起始号码”的技术术语。请不要使用StackOverflow作为你的个人博客。这个网站是用来问真正的编程问题的,而不是用来和全世界分享你的发明。@thg435自动回答问题。@AndersonGreen:是的,如果你有一个关于真正编程问题的实际问题,自动回答问题是可以的。不是你认为我们需要知道的一些随机想法。@thg435这个问题讨论的是一个真正的编程问题。它询问如何实现一个随机数发生器的输出,可以很容易地再现。