如何从父/种子数派生出伪随机数 - 满足父数具有的所有条件

我需要一些数学帮助。我正在从父种子值生成一个派生种子值。

我需要给定数字x,推导出数字y,x需要满足以下规则。

  1. x = math.random(1000, 9999)
  2. 对于给定的x,y是恒定的。即y = f(x)
  3. y不一定遵循x。即y不需要随x的增长而增长,y不需要随x的减少而减少。例如,如果x = 1234,在下一次迭代中‘x = 3456’,y也不需要增长。实际上,y最好是伪随机数。
  4. y也在范围内(1000,9999)

早期我尝试了以下函数:

y = tonumber(string.reverse(x))

也就是说,如果x = 1234,那么y = 4321

然而,两个数字之间存在直接的相关性,结果我的地形看起来太对称了。

点赞
用户1190388
用户1190388

你可以将生成的x值传回math.randomseed函数中。对于传入相同的x值,随机数生成器将始终生成相同的y值。

因此,可以这样做:

math.randomseed(os.time())
local r = math.random
local x = r(1000, 9999)
math.randomseed(x)
local y = r(1000, 9999)

为了测试它是否有效,以5668作为种子(或x),并且您将始终获得**3612** 作为y的结果。您甚至可以在https://lua.org/demo.html上测试它。

2016-08-31 15:10:54