Generate a random number from another number
在javascript中,是否可以从另一个数字生成随机数?
我正在尝试为我的一个分形地形生成器实现一个可预测的随机数生成器。我已经知道可以使用math.random()生成一个随机数,但是我想创建一个随机数生成器,它只为每个输入生成一个输出。(例如,predictableRandomGenerator(1)总是产生相同的结果,这不一定与输入相同。)
那么,是否可以从另一个数字生成一个随机数,其中每个输入的输出总是相同的?
- +1个用于开放式问题:)
- 我在谷歌上搜索了这个问题,没有找到任何相关的结果,所以我决定把它贴在这里。
- 相关:接受整数哈希键的整数哈希函数是什么?
- 只是好奇——这些需求的一些用例是什么?
- 你的输入范围是多少,输出范围是多少?还要整数吗?我可以想一些事情,但我不确定范围是什么…(例如,predictableRandomGenerator(n)可以返回π的第n位或第n个素数)
- @阿尔伯伦肖:这两个都很慢。
- 你能播种吗?然后您应该总是得到相同的"随机"数字序列(每个种子)。你可以拿第一个。但请注意,这不是唯一的,Math.random(x)和Math.random(y)可能产生相同的第一个"随机"数字。
- 好吧,显然你不能植入javascript Math.random()……但这可能会有所帮助:stackoverflow.com/questions/424292/…
- 您可以创建一个非常不稳定的切线函数,然后使用第n个值作为弧度,并从函数中获得结果值!
- 您是在请求伪随机数生成器的算法,还是在请求陷阱门函数?在前一种情况下,您应该使用线性同余伪随机数生成器算法。在后一种情况下,您应该使用类似于sha-256的哈希函数。
- 我认为这将有助于davidau.com/archives/2010/01/30/…
- 或多或少是这样的一个副本:stackoverflow.com/questions/521295/javascript-random-seeds
- 另一个副本:stackoverflow.com/questions/664014/…
可以使用校验和生成器(如MD5或SHA-1)为每个输入生成单个伪随机输出。sha-1将从作为输入输入的每个字符串中生成一个随机数,并且每个输出将只生成一个输入。(很可能其他校验和生成器也适用于此目的,因为校验和生成器只为输入的每个输入生成一个输出)。
- 这里需要注意的是,像MD5和SHA-1这样的校验和算法本质上设计得很慢。你真正想要的是一个种子伪随机数生成算法。这里的关键字是种子,这是您所指的"起始编号"的技术术语。
- 请不要将stackoverflow用作您的个人日志。这个网站是为了问真正的编程问题,而不是为了与世界分享你的发明。
- @在堆栈溢出时,实际上鼓励THG435自答问题。
- @安德森格林:是的,如果你对一个真正的编程问题有一个实际的问题,那么自我回答一个问题是可以的。不是你认为我们需要知道的随机想法。
- @THG435这个问题讨论了一个真正的编程问题。它询问如何实现一个随机数生成器,其输出可以很容易地被复制。
- 我同意@thg435,你应该只发布一个你真正不知道答案的问题。如果您在发布问题后发现了答案(自动应答链接指的是什么),那么发布该答案就很好了。很明显,这里的情况并非如此,因为你的答案与你的问题完全相同。
- @MHH每当你写一个问题,就会显示一个"回答你自己的问题"按钮。所以很明显,只要问题和答案都有用,就鼓励自己回答问题(即使在发布问题的同时)。
是的,这是可能的。不过,您需要编写自己的伪随机数生成器。
看,计算机不能真正产生随机数。但是,您可以使用一种算法来创建一个看起来是随机的数字序列。
该算法通常被赋予一个种子,每个种子都会产生一个不同的随机数序列。
最常见的算法是线性同余伪随机数发生器,由D.H.Lehmer定义,Donald E.Knuth在《计算机编程技术》第2卷:半数值算法第3.2.1节中描述。
有关更多详细信息,请参阅以下线程:Predict the seed of javascript's math.random
- 使用现有的哈希函数(如sha-1、sha-2或sha-3)可能更容易,而不是从头开始。
当然,身份识别功能如何:
1
| function getMappedRandom(random){ return random; } |
我不知道你为什么想要这种转变,但就随机性而言,它并不一定能使它变得更好。
。
- 这将简单地将输入作为输出返回。它仍然被认为是伪随机的吗?
- @安德森格林:顺便说一句,如果你是诚实的,你应该接受这个。这是对你提出的问题最准确和正确的回答。
- @THG435从技术上讲,这将被视为一种随机数生成器,但根据统计随机性测试判断,返回其输入输出的伪随机数生成器可能比大多数其他随机数生成器的"随机性"要小得多。也许我问题的最初措词是误导性的,因为它似乎暗示我希望随机数生成器产生作为输出的输入。
- @Andersongreen:问题是如何从另一个数字生成一个随机数,答案return 9完全正确。随机的属性不适用于单个对象,因此一个数字和另一个数字一样随机。它只是一个随机或非随机的数字序列。
- 嗯,你觉得大部分的计划都是怎样的?生成的值由上一个值确定。
- @THG435,漫画不是最初答案的一部分。那是我的附加条件。我认为看看最初的回答者是如何使用一个身份函数是恰当的。=)
- @aaditmshah:return self、return 9或xkcd.com/221在这里同样不错。您甚至可以在它们之间随机选择;)
- @435泰铢,没错。
我相信你需要的是所谓的单向散列函数。尝试hex_md5()或hex_sha1()。
如果您需要一个地形生成器的prng,那么我假设您需要一个种子随机数生成器,它为一个给定的种子复制伪随机数序列;这样每个种子都会创建一个单独的、不同的地形,稍后可以通过提供相同的种子来重建。
这可能对您有用:
http://davidbu.com/archives/2010/01/30/random_seeds_coded_hints_and_quintillions.htmlhttp://davidbu.com/encode/seedrandom.js网站