FastRng 1.2.0
dotnet add package FastRng version 1.2.0
NuGet\InstallPackage FastRng Version 1.2.0
<PackageReference Include="FastRng" Version="1.2.0" />
paket add FastRng version 1.2.0
#r "nuget: FastRng, 1.2.0"
// Install FastRng as a Cake Addin #addin nuget:?package=FastRng&version=1.2.0 // Install FastRng as a Cake Tool #tool nuget:?package=FastRng&version=1.2.0
FastRng
FastRng is a multithreaded pseudorandom number generator. Besides the generation of uniformly distributed random numbers, there are several other distributions to choose from. For performance reasons, the parameters of the distributions are not userdefinable. For some distributions, therefore, different parameter variations are available. If a different combination is desired, a separate class can be created.
Please note, that Math.NET's (https://www.mathdotnet.com/) random number generator is in some situations faster. Unlike Math.NET, MultiThreadedRng is multithreaded. Consumers can use a token to cancel an operation.
FastRng (class MultiThreadedRng
) using a shape fitter (a rejection sampler) to enforce arbitrary shapes of probabilities for desired distributions. By using the shape fitter, it is even easier to define discontinuous, arbitrary functions as shapes. Any consumer can define and use own distributions.
The class MultiThreadedRng
uses the George Marsaglia's MWC algorithm. The algorithm's implementation based loosely on John D. Cook's (johndcook.com) implementation. Thanks, John, for the inspiration.
Usage
Example code:
using FastRng.Float;
using FastRng.Float.Distributions;
[...]
using var rng = new MultiThreadedRng<float>();
var dist = new ChiSquareK1<float>(rng);
var value1 = dist.NextNumber();
var value2 = dist.NextNumber(rangeStart: 1.0f, rangeEnd: 1.0f);
if(dist.HasDecisionBeenMade(above: 0.8f, below: 0.9f))
{
// Decision has been made
}
Notes:
MultiThreadedRng
and all distributions are using generic math types: you might usefloat
,double
, orHalf
.MultiThreadedRng
isIDisposable
. It is important to callDispose
, when the generator is not needed anymore. Otherwise, the supporting background threads are still running.MultiThreadedRng
fills some buffers after creation. Thus, create and reuse it as long as needed. Avoid useless recreation.Distributions need some time in creation to calculate probabilities. Thus, create a distribution once and use reuse it. Avoid useless recreation.
Available Distributions
Normal Distribution (std. dev.=0.2, mean=0.5)
Wikipedia: https://en.wikipedia.org/wiki/Normal_distribution
Beta Distribution (alpha=2, beta=2)
Wikipedia: https://en.wikipedia.org/wiki/Beta_distribution
Beta Distribution (alpha=2, beta=5)
Wikipedia: https://en.wikipedia.org/wiki/Beta_distribution
Beta Distribution (alpha=5, beta=2)
Wikipedia: https://en.wikipedia.org/wiki/Beta_distribution
Cauchy / Lorentz Distribution (x0=0)
Wikipedia: https://en.wikipedia.org/wiki/Cauchy_distribution
Cauchy / Lorentz Distribution (x0=1)
Wikipedia: https://en.wikipedia.org/wiki/Cauchy_distribution
ChiSquare Distribution (k=1)
Wikipedia: https://en.wikipedia.org/wiki/Chisquare_distribution
ChiSquare Distribution (k=4)
Wikipedia: https://en.wikipedia.org/wiki/Chisquare_distribution
ChiSquare Distribution (k=10)
Wikipedia: https://en.wikipedia.org/wiki/Chisquare_distribution
Exponential Distribution (lambda=5)
Wikipedia: https://en.wikipedia.org/wiki/Exponential_distribution
Exponential Distribution (lambda=10)
Wikipedia: https://en.wikipedia.org/wiki/Exponential_distribution
Inverse Exponential Distribution (lambda=5)
Wikipedia: https://en.wikipedia.org/wiki/Inverse_distribution#Inverse_exponential_distribution
Inverse Exponential Distribution (lambda=10)
Wikipedia: https://en.wikipedia.org/wiki/Inverse_distribution#Inverse_exponential_distribution
Gamma Distribution (alpha=5, beta=15)
Wikipedia: https://en.wikipedia.org/wiki/Gamma_distribution
Inverse Gamma Distribution (alpha=3, beta=0.5)
Wikipedia: https://en.wikipedia.org/wiki/Inversegamma_distribution
Laplace Distribution (b=0.1, mu=0)
Wikipedia: https://en.wikipedia.org/wiki/Laplace_distribution
Laplace Distribution (b=0.1, mu=0.5)
Wikipedia: https://en.wikipedia.org/wiki/Laplace_distribution
LogNormal Distribution (sigma=1, mu=0)
Wikipedia: https://en.wikipedia.org/wiki/Lognormal_distribution
StudentT Distribution (nu=1)
Wikipedia: https://en.wikipedia.org/wiki/Student%27s_tdistribution
Weibull Distribution (k=0.5, lambda=1)
Wikipedia: https://en.wikipedia.org/wiki/Weibull_distribution
Product  Versions Compatible and additional computed target framework versions. 

.NET  net8.0 is compatible. net8.0android was computed. net8.0browser was computed. net8.0ios was computed. net8.0maccatalyst was computed. net8.0macos was computed. net8.0tvos was computed. net8.0windows was computed. 

net8.0
 No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.