Class FastRandom
Random number generator service (based on XOR shift technique).
Implements
Inherited Members
Namespace: Evergine.Framework.Services
Assembly: Evergine.Framework.dll
Syntax
public sealed class FastRandom : Service, IDependencyObject
Remarks
Based on FastRandom.cs from colgreen: http://www.codeproject.com/Articles/9187/A-fast-equivalent-for-System-Random.
Constructors
FastRandom()
Initializes a new instance of the FastRandom class.
Declaration
public FastRandom()
Remarks
The initial seed depends on the time.
FastRandom(int)
Initializes a new instance of the FastRandom class with a given seed.
Declaration
public FastRandom(int seed)
Parameters
Type | Name | Description |
---|---|---|
int | seed | The initial seed. |
Properties
Seed
Gets or sets a value indicating whether the Seed.
Declaration
public int Seed { get; set; }
Property Value
Type | Description |
---|---|
int |
Methods
InUnitSphere()
Generates a 3D vector inside a radius 1 sphere with uniform distribution.
Declaration
public Vector3 InUnitSphere()
Returns
Type | Description |
---|---|
Vector3 | A Vector3D. |
InsideUnitCircle()
Generates a 2D vector inside an unit circle with uniform distribution.
Declaration
public Vector2 InsideUnitCircle()
Returns
Type | Description |
---|---|
Vector2 | A Vector2D. |
Next()
Generates a random int over the range 0 to int.MaxValue-1.
Declaration
public int Next()
Returns
Type | Description |
---|---|
int | A 32-bit signed integer greater than or equal to zero and less than MaxValue. |
Remarks
MaxValue is not generated in order to remain functionally equivalent to System.Random.Next(). This does slightly eat into some of the performance gain over System.Random, but not much. For better performance see: Call NextInt() for an int over the range 0 to int.MaxValue. Call NextUInt() and cast the result to an int to generate an int over the full Int32 value range including negative values.
Next(int)
Generates a random int over the range 0 to upperBound-1, and not including upperBound.
Declaration
public int Next(int upperBound)
Parameters
Type | Name | Description |
---|---|---|
int | upperBound | Non inclusive upper bound. |
Returns
Type | Description |
---|---|
int | A 32-bit signed integer greater than or equal to zero and less than |
Next(int, int)
Generates a random int over the range lowerBound to upperBound-1, and not including upperBound. upperBound must be >= lowerBound. lowerBound may be negative.
Declaration
public int Next(int lowerBound, int upperBound)
Parameters
Type | Name | Description |
---|---|---|
int | lowerBound | The inclusive lower bound. |
int | upperBound | The non inclusive upper bound. |
Returns
Type | Description |
---|---|
int | A 32-bit signed integer greater than or equal to |
NextBool()
Generates a single random bit.
Declaration
public bool NextBool()
Returns
Type | Description |
---|---|
bool | A boolean. |
Remarks
This method's performance is improved by generating 32 bits in one operation and storing them ready for future calls.
NextBool(float)
Generates a single random bit with True value weight.
Declaration
public bool NextBool(float trueWeight)
Parameters
Type | Name | Description |
---|---|---|
float | trueWeight | The weight of the TRUE value. |
Returns
Type | Description |
---|---|
bool | A boolean. |
NextBytes(byte[])
Fills the provided byte array with random bytes.
Declaration
public void NextBytes(byte[] buffer)
Parameters
Type | Name | Description |
---|---|---|
byte[] | buffer | An array of bytes to contain random numbers. |
Remarks
This method is functionally equivalent to System.Random.NextBytes().
NextDouble()
Generates a random double between 0.0 and 1.0, not including 1.0.
Declaration
public double NextDouble()
Returns
Type | Description |
---|---|
double | A double-precision floating point number greater than or equal to 0.0, and less than 1.0. |
NextInt()
Generates a random int over the range 0 to int.MaxValue, both inclusive.
Declaration
public int NextInt()
Returns
Type | Description |
---|---|
int | A 32-bit signed integer greater than or equal to zero and less or equal than MaxValue. |
Remarks
This method differs from Next() only in that the range is 0 to int.MaxValue and not 0 to int.MaxValue-1. The slight difference in range means this method is slightly faster than Next() but is not functionally equivalent to System.Random.Next().
NextRotation()
Generates a single angle in radians [0-2*Pi).
Declaration
public float NextRotation()
Returns
Type | Description |
---|---|
float | An angle. |
NextUInt()
Generates a uint. Values returned are over the full range of a uint, uint.MinValue to uint.MaxValue, inclusive.
Declaration
public uint NextUInt()
Returns
Type | Description |
---|---|
uint | A 32-bit signed integer greater than or equal to zero and less or equal than MaxValue. |
Remarks
This is the fastest method for generating a single random number because the underlying random number generator algorithm generates 32 random bits that can be cast directly to a uint.
OnUnitSphere()
Generates a 3D vector in a radius 1 sphere surface with uniform distribution.
Declaration
public Vector3 OnUnitSphere()
Returns
Type | Description |
---|---|
Vector3 | A Vector3D. |