DragonProgram
DragonProgram

Reputation: 41

Lua Random number generator always produces the same number

I have looked up several tutorials on how to generate random numbers with lua, each said to use math.random(), so I did. however, every time I use it I get the same number every time, I have tried rewriting the code, and I always get the lowest possible number. I even included a random seed based on the OS time. code below.

require "math"
math.randomseed(os.time())
num = math.random(0,10)
print(num)

Upvotes: 4

Views: 4229

Answers (3)

MilkyWay ISH
MilkyWay ISH

Reputation: 1

Adding math.random() right after math.randomseed(os.time()) seems to do it for me.

math.randomseed(os.time())
math.random() 
num = math.random(0, 10)
print(num)

io.read()

Upvotes: 0

Mike Spadafora
Mike Spadafora

Reputation: 1

This might help! I had to use these functions to write a class that generates Nano IDs. I basically used the milliseconds from the os.clock() function and used that for math.randomseed().

NanoId = {
  validCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-",

  generate = function (size, validChars)

    local response = ""
    local ms = string.match(tostring(os.clock()), "%d%.(%d+)")
    local temp = math.randomseed(ms)

    if (size > 0 and string.len(validChars) > 0) then
      for i = 1, size do
        local num = math.random(string.len(validChars))

        response = response..string.sub(validChars, num, num)
      end
    end

    return response
    end
}

function NanoId:Generate()
  return self.generate(21, self.validCharacters)
end

-- Runtime Testing

for i = 1, 10 do
    print(NanoId:Generate())
end

--[[ 

Output:

>>> p2r2-WqwvzvoIljKa6qDH
>>> pMoxTET2BrIjYUVXNMDNH
>>> w-nN7J0RVDdN6-R9iv4i-
>>> cfRMzXB4jZmc3quWEkAxj
>>> aFeYCA2kgOx-s4UN02s0s
>>> xegA--_EjEmcDk3Q1zh7K
>>> 6dkVRaNpW4cMwzCPDL3zt
>>> R2Fct5Up5OwnHeExDnqZI
>>> JwnlLZcp8kml-MHUEFAgm
>>> xPr5dULuv48UMaSTzdW5J

]]

Upvotes: 0

csaar
csaar

Reputation: 560

I'm using the random function like this:

math.randomseed(os.time())
num = math.random() and math.random() and math.random() and math.random(0, 10)

This is working fine. An other option would be to improve the built-in random function, described here.

Upvotes: 0

Related Questions