Math 如何推导一个伪随机数,给定一个父/种子数-这符合父数的所有标准

Math 如何推导一个伪随机数,给定一个父/种子数-这符合父数的所有标准,math,random,lua,numbers,random-seed,Math,Random,Lua,Numbers,Random Seed,我需要一些数学方面的帮助。我正在从父种子值生成派生种子值 我需要导出一个y,给定一个x,它遵循以下规则 x=math.random(10009999) 对于给定的x,y是常数。即y=f(x) y不一定跟在x后面。当x增大时y不需要增大,当x减小时y不需要减小。 如果x=1234,在下一次迭代中,x=3456,那么y也不需要增长。事实上,y最好是一个伪随机数 y也在范围内(10009999) 早些时候,我使用了以下功能: y = tonumber(string.reverse(x)) 也就是说,

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

我需要导出一个y,给定一个x,它遵循以下规则

  • x=math.random(10009999)
  • 对于给定的x,y是常数。即
    y=f(x)
  • y不一定跟在x后面。当x增大时y不需要增大,当x减小时y不需要减小。 如果x=1234,在下一次迭代中,x=3456,那么y也不需要增长。事实上,y最好是一个伪随机数
  • y也在范围内(10009999)
  • 早些时候,我使用了以下功能:

    y = tonumber(string.reverse(x))
    
    也就是说,如果
    x=1234
    那么
    y=4321


    但是,这两个数字之间存在直接的相关性,因此我的地形看起来过于对称。

    您可以将生成的
    x
    值传递回
    math.randomseed
    函数。RNG将始终为传递给seed的
    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
    ),对于
    y
    ,您将始终返回。你甚至可以在

    上测试它,所以基本上你想要一个散列函数?不过,最终,你总是会得到一个直接的相关性,因为对于任何给定的
    x
    ,你会得到一个固定的
    y
    。不确定它是否是一个散列函数。但是,是的,我希望输出y与x的坐标关系尽可能小。我所关心的一个函数是使用一个像pi一样的无限浮点。对于x=1000,取pi的前4位小数。对于x=1001,取下一个4,依此类推。如果任何输出小于100,则只需跳过1个字符并进行检查。由于pi是一个常数,因此x的值总是给出y的特定值。然而,这在实践中感觉非常令人畏惧,我不确定如何才能有效地实现这样的功能。我很没经验。我真的很喜欢这个。如此简单,完美地解决了我的问题。