In observance of the gift-giving season, we’re releasing a new Lua datatype: Random.
Random is used to generate high-quality pseudorandom numbers from a dedicated internal state.
Creates a new Random object from the given seed.
Multiple Randoms seeded with the same value will always produce the same number sequence.
If a seed isn’t specified, one will automatically be pulled from an internal entropy source.
int Random:NextInteger(int min, int max)
Returns a pseudorandom integer uniformly distributed over [min, max].
double Random:NextNumber([double min=0, double max=1])
Returns a pseudorandom number uniformly distributed over [min, max).
Returns a new Random object with the same state as the original.
This method can be useful for branching off the results of the RNG.
The algorithm used by Random is the XSH-RR variant of the PCG family.
In a nutshell, it’s is a fast algorithm with excellent statistical properties.
We’re planning to change
math.random to use the same algorithm by early next year.
Flip a coin
local rng = Random.new() local function CoinFlip() return rng:NextNumber() < 1/2 and 'Heads' or 'Tails' end
Shuffle an array
local rng = Random.new() local function Shuffle(t) for i = #t, 2, -1 do local j = rng:NextInteger(1, i) t[j], t[i] = t[i], t[j] end end
Generate a random color
local rng = Random.new() local function RandomColor() local r = rng:NextNumber(0, 255) local g = rng:NextNumber(0, 255) local b = rng:NextNumber(0, 255) return Color3.fromRGB(r, g, b) end
Feel free to post questions and comments; our team would love to hear your feedback.
This is live. Happy holidays!