FastRng/FastRng/Distributions/CauchyLorentzX1.cs

17 lines
663 B
C#

using System.Numerics;
namespace FastRng.Distributions;
public sealed class CauchyLorentzX1<TNum> : Distribution<TNum> where TNum : IFloatingPointIeee754<TNum>
{
private static readonly TNum CONSTANT = TNum.CreateChecked(0.31f);
private static readonly TNum SCALE = TNum.CreateChecked(0.1f);
private static readonly TNum MEDIAN = TNum.One;
private static readonly TNum TWO = TNum.CreateChecked(2f);
public CauchyLorentzX1(IRandom<TNum> rng) : base(rng)
{
}
private protected override TNum ShapeFunction(TNum x) => CONSTANT * (TNum.One / (TNum.Pi * SCALE)) * ((SCALE * SCALE) / (TNum.Pow(x - MEDIAN, TWO) + (SCALE * SCALE)));
}