Random LUA中的随机种子

Random LUA中的随机种子,random,lua,Random,Lua,我正在编写一个随机数字的代码。我将math.randomseed(os.time())放入一个循环中。代码如下所示: for i = 1, 1000 do math.randomseed( os.time() ) j = math.random(i, row-one) u[i], u[j] = u[j], u[i] for k = 1, 11 do file:write(input2[u[i]][k], " ") end file:write"\n" end

我正在编写一个随机数字的代码。我将
math.randomseed(os.time())
放入一个循环中。代码如下所示:

for i = 1, 1000 do
  math.randomseed( os.time() )
  j = math.random(i, row-one)
  u[i], u[j] = u[j], u[i]
  for k = 1, 11 do
     file:write(input2[u[i]][k], " ")
  end
  file:write"\n"
end

当我多次运行它时,整个输出总是相同的。randomseed不应该在重新运行时防止重复吗?

在程序开始时调用
math.randomseed
一次。在循环中调用它是没有意义的。

通常第一个随机值不是真正随机的(但无论如何它都不是真正随机的,它是一个伪随机数生成器)。 首先设置一个随机种子,然后随机生成几次。 请尝试以下代码,例如:

math.randomseed( os.time() )
math.random() math.random() math.random()
for i = 1, 1000 do
  j = math.random(i, row-one)
  u[i], u[j] = u[j], u[i]
  for k = 1, 11 do
     file:write(input2[u[i]][k], " ")
  end
  file:write"\n"
end
但是,您可以从以下位置进行尝试:


os.time()
在一秒钟内返回相同的值。@EgorSkriptunoff那么当我重新运行代码时,如何使整个结果不同?不要在一秒钟内运行相同的代码两次:-)只需使用类似于
os.time()-os.clock()*1000
的方法即可
-- improving the built-in pseudorandom generator
do
   local oldrandom = math.random
   local randomtable
   math.random = function ()
      if randomtable == nil then
         randomtable = {}
         for i = 1, 97 do
            randomtable[i] = oldrandom()
         end
      end
      local x = oldrandom()
      local i = 1 + math.floor(97*x)
      x, randomtable[i] = randomtable[i], x
      return x
   end
end