Random Number Generators in C# QuickStart Sample
Illustrates how to use specialized random number generator classes in the Numerics.NET.Statistics.Random namespace in C#.
View this sample in: Visual Basic F# IronPython
using System;
using Numerics.NET;
using Numerics.NET.Random;
namespace Numerics.NET.QuickStart.CSharp
{
/// <summary>
/// Illustrates the use of the classes that implement
/// pseudo-random number generators.
/// </summary>
class RandomNumberGenerators
{
static void Main(string[] args)
{
// The license is verified at runtime. We're using
// a 30 day trial key here. For more information, see
// https://numerics.net/trial-key
Numerics.NET.License.Verify("64542-18980-57619-62268");
// This QuickStart Sample gives an overview of the pseudo-random
// number generators that provide an alternative for the
// System.Random class..
//
// ExtendedRandom class
//
// The ExtendedRandom class simply extends the functionality
// of the System.Random class:
ExtendedRandom extended = new ExtendedRandom();
int[] intValues = new int[100];
double[] doubleValues = new double[100];
// The fill method fills an array of integers with random numbers
extended.Fill(intValues);
Console.WriteLine($"integer(99) = {intValues[99]}");
// Or, it can generate uniform real values:
extended.Fill(doubleValues);
Console.WriteLine($"double(99) = {doubleValues[99]}");
// All random number generators can also produce variates
// from any user-specified probability distribution.
// The NonUniformRandomNumbers sample illustrates
// how to do this.
//
// RANLUX Generators
//
// The RANLUX generators are available with three different
// 'luxury levels.' Each level produces random numbers of
// increasing quality at a performance cost.
//
// There are four constructors. The first constructor uses the
// default seed and the default (lowest) luxury level:
RanLux ranLux1 = new RanLux();
// We can specify a seed value as well:
RanLux ranLux2 = new RanLux(99);
// We can specify the luxury level in the constructor:
RanLux ranLux3 = new RanLux(RanLuxLuxuryLevel.Better);
// Finally, we can specify both a seed and the luxury level:
RanLux ranLux4 = new RanLux(99, RanLuxLuxuryLevel.Best);
// All methods of System.Random and ExtendedRandom are available:
ranLux1.Fill(intValues);
ranLux2.Fill(doubleValues);
Console.WriteLine($"Integer from RanLux(Best): {ranLux3.Next(100)}");
//
// Generalized Feedback Shift Register Generator
//
// This generator is implemented by the GfsrGenerator class.
// It has three constructors. A default constructor that uses
// a default seed value:
GfsrGenerator gfsr1 = new GfsrGenerator();
// A constructor that takes a single integer seed:
GfsrGenerator gfsr2 = new GfsrGenerator(99);
// And a constructor that takes an array of integers
// as its seed. The maximum size of this seed array
// is 2^14-1 = 16383.
GfsrGenerator gfsr3 = new GfsrGenerator(new int[] {99, 17, int.MaxValue});
// Once again, all standard methods are available.
Console.WriteLine($"Double from GFSR: {gfsr2.NextDouble()}");
//
// Mersenne Twister
//
// The Mersenne Twister is a variation on the GFSR generator and,
// not surprisingly, also has three constructors:
MersenneTwister mersenne1 = new MersenneTwister();
MersenneTwister mersenne2 = new MersenneTwister(99);
MersenneTwister mersenne3 = new MersenneTwister(new int[] {99, 17, int.MaxValue});
Console.Write("Press any key to exit.");
Console.ReadLine();
}
}
}