Hey everyone,

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.

## API

### Random.new([double seed])

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).

### Random Random:Clone()

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.

## Technical details

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.

## Examples

### 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!