# Class XORShiftRNG

java.lang.Object
java.util.Random
org.uncommons.maths.random.XORShiftRNG

All Implemented Interfaces:
  `Serializable, RandomGenerator, RepeatableRNG`

public class XORShiftRNG extends Random implements RepeatableRNG

Very fast pseudo random number generator. See this page for a description. This RNG has a period of about 2^160, which is not as long as the `MersenneTwisterRNG` but it is faster.

NOTE: Because instances of this class require 160-bit seeds, it is not possible to seed this RNG using the `Random.setSeed(long)` method inherited from `Random`. Calls to this method will have no effect. Instead the seed must be set by a constructor.

Since:
  1.2
See Also:
  - Serialized Form

## Nested Class Summary

### Nested classes/interfaces inherited from interface RandomGenerator

`RandomGenerator.ArbitrarilyJumpableGenerator, RandomGenerator.JumpableGenerator, RandomGenerator.LeapableGenerator, RandomGenerator.SplittableGenerator, RandomGenerator.StreamableGenerator`

## Constructor Summary

Constructors
Constructor
Description
`XORShiftRNG()`
Creates a new RNG and seeds it using the default seeding strategy.
`XORShiftRNG(byte[] seed)`
Creates an RNG and seeds it with the specified seed data.
`XORShiftRNG(SeedGenerator seedGenerator)`
Seed the RNG using the provided seed generation strategy.

## Method Summary

Modifier and Type
Method
Description
`byte[]`
`getSeed()`
`protected int`
`next(int bits)`

### Methods inherited from class Random

`doubles, doubles, doubles, doubles, from, ints, ints, ints, ints, longs, longs, longs, longs, nextBoolean, nextBytes, nextDouble, nextFloat, nextGaussian, nextInt, nextInt, nextLong, setSeed`

### Methods inherited from class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface RandomGenerator

`equiDoubles, isDeprecated, nextDouble, nextDouble, nextExponential, nextFloat, nextFloat, nextGaussian, nextInt, nextLong, nextLong`

## Constructor Details

### XORShiftRNG

public XORShiftRNG()
Creates a new RNG and seeds it using the default seeding strategy.

### XORShiftRNG

public XORShiftRNG(SeedGenerator seedGenerator) throws SeedException
Seed the RNG using the provided seed generation strategy.

Parameters:
  `seedGenerator` - The seed generation strategy that will provide the seed value for this RNG.
Throws:
  `SeedException` - If there is a problem generating a seed.

### XORShiftRNG

public XORShiftRNG(byte[] seed)
Creates an RNG and seeds it with the specified seed data.

Parameters:
  `seed` - The seed data used to initialise the RNG.

## Method Details

### getSeed

public byte[] getSeed()

Specified by:
  `getSeed` in interface `RepeatableRNG`
Returns:
  The seed data used to initialise this pseudo-random number generator.

### next

protected int next(int bits)

Overrides:
  `next` in class `Random`