Merge branch '5-bug-cannot-implement-own-distributions' into 'main'

Resolve "Bug: Cannot implement own distributions"

Closes #5

See merge request open-source/dotnet/FastRng!4
This commit is contained in:
Thorsten 2023-10-25 13:22:04 +00:00
commit 2e9a5e336f
20 changed files with 41 additions and 21 deletions

View File

@ -12,5 +12,6 @@ public sealed class BetaA2B2<TNum> : Distribution<TNum> where TNum : IFloatingPo
{
}
private protected override TNum ShapeFunction(TNum x) => CONSTANT * TNum.Pow(x, ALPHA - TNum.One) * TNum.Pow(TNum.One - x, BETA - TNum.One);
/// <inheritdoc />
public override TNum ShapeFunction(TNum x) => CONSTANT * TNum.Pow(x, ALPHA - TNum.One) * TNum.Pow(TNum.One - x, BETA - TNum.One);
}

View File

@ -12,5 +12,6 @@ public sealed class BetaA2B5<TNum> : Distribution<TNum> where TNum : IFloatingPo
{
}
private protected override TNum ShapeFunction(TNum x) => CONSTANT * TNum.Pow(x, ALPHA - TNum.One) * TNum.Pow(TNum.One - x, BETA - TNum.One);
/// <inheritdoc />
public override TNum ShapeFunction(TNum x) => CONSTANT * TNum.Pow(x, ALPHA - TNum.One) * TNum.Pow(TNum.One - x, BETA - TNum.One);
}

View File

@ -12,5 +12,6 @@ public sealed class BetaA5B2<TNum> : Distribution<TNum> where TNum : IFloatingPo
{
}
private protected override TNum ShapeFunction(TNum x) => CONSTANT * TNum.Pow(x, ALPHA - TNum.One) * TNum.Pow(TNum.One - x, BETA - TNum.One);
/// <inheritdoc />
public override TNum ShapeFunction(TNum x) => CONSTANT * TNum.Pow(x, ALPHA - TNum.One) * TNum.Pow(TNum.One - x, BETA - TNum.One);
}

View File

@ -13,5 +13,6 @@ public sealed class CauchyLorentzX0<TNum> : Distribution<TNum> where TNum : IFlo
{
}
private protected override TNum ShapeFunction(TNum x) => CONSTANT * ( TNum.One / (TNum.Pi * SCALE)) * ((SCALE * SCALE) / (TNum.Pow(x - MEDIAN, TWO) + (SCALE * SCALE)));
/// <inheritdoc />
public override TNum ShapeFunction(TNum x) => CONSTANT * ( TNum.One / (TNum.Pi * SCALE)) * ((SCALE * SCALE) / (TNum.Pow(x - MEDIAN, TWO) + (SCALE * SCALE)));
}

View File

@ -13,5 +13,6 @@ public sealed class CauchyLorentzX1<TNum> : Distribution<TNum> where TNum : IFlo
{
}
private protected override TNum ShapeFunction(TNum x) => CONSTANT * (TNum.One / (TNum.Pi * SCALE)) * ((SCALE * SCALE) / (TNum.Pow(x - MEDIAN, TWO) + (SCALE * SCALE)));
/// <inheritdoc />
public override TNum ShapeFunction(TNum x) => CONSTANT * (TNum.One / (TNum.Pi * SCALE)) * ((SCALE * SCALE) / (TNum.Pow(x - MEDIAN, TWO) + (SCALE * SCALE)));
}

View File

@ -24,5 +24,6 @@ public sealed class ChiSquareK1<TNum> : Distribution<TNum> where TNum : IFloatin
{
}
private protected override TNum ShapeFunction(TNum x) => CONSTANT * ((TNum.Pow(x, K_HALF_MINUS_ONE) * TNum.Exp(-x * HALF)) / DIVISOR);
/// <inheritdoc />
public override TNum ShapeFunction(TNum x) => CONSTANT * ((TNum.Pow(x, K_HALF_MINUS_ONE) * TNum.Exp(-x * HALF)) / DIVISOR);
}

View File

@ -24,5 +24,6 @@ public sealed class ChiSquareK10<TNum> : Distribution<TNum> where TNum : IFloati
{
}
private protected override TNum ShapeFunction(TNum x) => CONSTANT * ((TNum.Pow(x, K_HALF_MINUS_ONE) * TNum.Exp(-x * HALF)) / DIVISOR);
/// <inheritdoc />
public override TNum ShapeFunction(TNum x) => CONSTANT * ((TNum.Pow(x, K_HALF_MINUS_ONE) * TNum.Exp(-x * HALF)) / DIVISOR);
}

View File

@ -24,5 +24,6 @@ public sealed class ChiSquareK4<TNum> : Distribution<TNum> where TNum : IFloatin
{
}
private protected override TNum ShapeFunction(TNum x) => CONSTANT * ((TNum.Pow(x, K_HALF_MINUS_ONE) * TNum.Exp(-x * HALF)) / DIVISOR);
/// <inheritdoc />
public override TNum ShapeFunction(TNum x) => CONSTANT * ((TNum.Pow(x, K_HALF_MINUS_ONE) * TNum.Exp(-x * HALF)) / DIVISOR);
}

View File

@ -11,5 +11,6 @@ public sealed class ExponentialLa10<TNum> : Distribution<TNum> where TNum : IFlo
{
}
private protected override TNum ShapeFunction(TNum x) => CONSTANT * LAMBDA * TNum.Exp(-LAMBDA * x);
/// <inheritdoc />
public override TNum ShapeFunction(TNum x) => CONSTANT * LAMBDA * TNum.Exp(-LAMBDA * x);
}

View File

@ -11,5 +11,6 @@ public sealed class ExponentialLa5<TNum> : Distribution<TNum> where TNum : IFloa
{
}
private protected override TNum ShapeFunction(TNum x) => CONSTANT * LAMBDA * TNum.Exp(-LAMBDA * x);
/// <inheritdoc />
public override TNum ShapeFunction(TNum x) => CONSTANT * LAMBDA * TNum.Exp(-LAMBDA * x);
}

View File

@ -21,5 +21,6 @@ public sealed class GammaA5B15<TNum> : Distribution<TNum> where TNum : IFloating
{
}
private protected override TNum ShapeFunction(TNum x) => CONSTANT * ((BETA_TO_THE_ALPHA * TNum.Pow(x, ALPHA - TNum.One) * TNum.Exp(-BETA * x)) / GAMMA_ALPHA);
/// <inheritdoc />
public override TNum ShapeFunction(TNum x) => CONSTANT * ((BETA_TO_THE_ALPHA * TNum.Pow(x, ALPHA - TNum.One) * TNum.Exp(-BETA * x)) / GAMMA_ALPHA);
}

View File

@ -11,5 +11,6 @@ public sealed class InverseExponentialLa10<TNum> : Distribution<TNum> where TNum
{
}
private protected override TNum ShapeFunction(TNum x) => CONSTANT * LAMBDA * TNum.Exp(LAMBDA * x);
/// <inheritdoc />
public override TNum ShapeFunction(TNum x) => CONSTANT * LAMBDA * TNum.Exp(LAMBDA * x);
}

View File

@ -11,5 +11,6 @@ public sealed class InverseExponentialLa5<TNum> : Distribution<TNum> where TNum
{
}
private protected override TNum ShapeFunction(TNum x) => CONSTANT * LAMBDA * TNum.Exp(LAMBDA * x);
/// <inheritdoc />
public override TNum ShapeFunction(TNum x) => CONSTANT * LAMBDA * TNum.Exp(LAMBDA * x);
}

View File

@ -22,5 +22,6 @@ public sealed class InverseGammaA3B05<TNum> : Distribution<TNum> where TNum : IF
{
}
private protected override TNum ShapeFunction(TNum x) => FACTOR_LEFT * TNum.Pow(x, -ALPHA - TNum.One) * TNum.Exp(-BETA / x);
/// <inheritdoc />
public override TNum ShapeFunction(TNum x) => FACTOR_LEFT * TNum.Pow(x, -ALPHA - TNum.One) * TNum.Exp(-BETA / x);
}

View File

@ -20,5 +20,6 @@ public sealed class LaplaceB01M0<TNum> : Distribution<TNum> where TNum : IFloati
{
}
private protected override TNum ShapeFunction(TNum x) => FACTOR_LEFT * TNum.Exp(-TNum.Abs(x - MU) / B);
/// <inheritdoc />
public override TNum ShapeFunction(TNum x) => FACTOR_LEFT * TNum.Exp(-TNum.Abs(x - MU) / B);
}

View File

@ -20,5 +20,6 @@ public sealed class LaplaceB01M05<TNum> : Distribution<TNum> where TNum : IFloat
{
}
private protected override TNum ShapeFunction(TNum x) => FACTOR_LEFT * TNum.Exp(-TNum.Abs(x - MU) / B);
/// <inheritdoc />
public override TNum ShapeFunction(TNum x) => FACTOR_LEFT * TNum.Exp(-TNum.Abs(x - MU) / B);
}

View File

@ -20,5 +20,6 @@ public sealed class LogNormalS1M0<TNum> : Distribution<TNum> where TNum : IFloat
{
}
private protected override TNum ShapeFunction(TNum x) => (CONSTANT / (x * FACTOR)) * TNum.Exp( -(TNum.Pow(TNum.Log(x) - MU, TWO) / (TWO * TNum.Pow(SIGMA, TWO))));
/// <inheritdoc />
public override TNum ShapeFunction(TNum x) => (CONSTANT / (x * FACTOR)) * TNum.Exp( -(TNum.Pow(TNum.Log(x) - MU, TWO) / (TWO * TNum.Pow(SIGMA, TWO))));
}

View File

@ -14,5 +14,6 @@ public sealed class NormalS02M05<TNum> : Distribution<TNum> where TNum : IFloati
{
}
private protected override TNum ShapeFunction(TNum x) => TNum.One / (STD_DEV * SQRT_2_PI) * TNum.Exp(NEGATIVE_HALF * TNum.Pow((x - MEAN) / STD_DEV, TWO));
/// <inheritdoc />
public override TNum ShapeFunction(TNum x) => TNum.One / (STD_DEV * SQRT_2_PI) * TNum.Exp(NEGATIVE_HALF * TNum.Pow((x - MEAN) / STD_DEV, TWO));
}

View File

@ -26,5 +26,6 @@ public sealed class StudentTNu1<TNum> : Distribution<TNum> where TNum : IFloatin
{
}
private protected override TNum ShapeFunction(TNum x) => CONSTANT * TNum.Pow((DIVIDEND / DIVISOR) * TNum.Pow( TNum.One + TNum.Pow(START + x * COMPRESS, TWO) / NU, EXPONENT), COMPRESS);
/// <inheritdoc />
public override TNum ShapeFunction(TNum x) => CONSTANT * TNum.Pow((DIVIDEND / DIVISOR) * TNum.Pow( TNum.One + TNum.Pow(START + x * COMPRESS, TWO) / NU, EXPONENT), COMPRESS);
}

View File

@ -12,5 +12,6 @@ public sealed class WeibullK05La1<TNum> : Distribution<TNum> where TNum : IFloat
{
}
private protected override TNum ShapeFunction(TNum x) => CONSTANT * ( (K / LAMBDA) * TNum.Pow(x / LAMBDA, K - TNum.One) * TNum.Exp(-TNum.Pow(x/LAMBDA, K)));
/// <inheritdoc />
public override TNum ShapeFunction(TNum x) => CONSTANT * ( (K / LAMBDA) * TNum.Pow(x / LAMBDA, K - TNum.One) * TNum.Exp(-TNum.Pow(x/LAMBDA, K)));
}