Browse Source

Dist: StudentT density more robust for very large degrees of freedom #44

pull/47/head
Christoph Ruegg 14 years ago
parent
commit
f8792b77f4
  1. 7
      src/Numerics/Distributions/Continuous/StudentT.cs

7
src/Numerics/Distributions/Continuous/StudentT.cs

@ -352,15 +352,14 @@ namespace MathNet.Numerics.Distributions
public double Density(double x)
{
// TODO JVG we can probably do a better job for Cauchy special case
if (Double.IsPositiveInfinity(_dof))
if (_dof >= 1e+8d)
{
return Normal.Density(_location, _scale, x);
}
var d = (x - _location) / _scale;
return SpecialFunctions.Gamma((_dof + 1.0) / 2.0)
return Math.Exp(SpecialFunctions.GammaLn((_dof + 1.0) / 2.0) - SpecialFunctions.GammaLn(_dof / 2.0))
* Math.Pow(1.0 + (d * d / _dof), -0.5 * (_dof + 1.0))
/ SpecialFunctions.Gamma(_dof / 2.0)
/ Math.Sqrt(_dof * Math.PI)
/ _scale;
}
@ -373,7 +372,7 @@ namespace MathNet.Numerics.Distributions
public double DensityLn(double x)
{
// TODO JVG we can probably do a better job for Cauchy special case
if (Double.IsPositiveInfinity(_dof))
if (_dof >= 1e+8d)
{
return Normal.DensityLn(_location, _scale, x);
}

Loading…
Cancel
Save