From 09cc6f7a13a16e804a5e4d4f927f66f1fc32f74b Mon Sep 17 00:00:00 2001 From: Christoph Ruegg Date: Wed, 21 Aug 2013 19:03:35 +0200 Subject: [PATCH] Use existing constants where appropriate --- src/FSharpExamples/MCMC.fsx | 5 +++-- src/Numerics/Distributions/Chi.cs | 2 +- src/Numerics/Distributions/Laplace.cs | 2 +- src/Numerics/Distributions/Normal.cs | 2 +- src/Numerics/Distributions/Rayleigh.cs | 2 +- src/Numerics/Distributions/Stable.cs | 4 ++-- src/Numerics/LinearAlgebra/Complex/Factorization/UserQR.cs | 2 +- src/Numerics/LinearAlgebra/Complex32/Factorization/UserQR.cs | 2 +- src/Numerics/LinearAlgebra/Double/Factorization/UserQR.cs | 2 +- src/Numerics/LinearAlgebra/Single/Factorization/UserQR.cs | 2 +- .../LinearAlgebra/ManagedLinearAlgebraProvider.Double.cs | 2 +- .../LinearAlgebra/ManagedLinearAlgebraProvider.Single.cs | 2 +- src/Numerics/Trigonometry.cs | 2 +- src/UnitTests/DistributionTests/Continuous/ChiTests.cs | 2 +- src/UnitTests/DistributionTests/Continuous/LaplaceTests.cs | 2 +- src/UnitTests/DistributionTests/Continuous/RayleighTests.cs | 2 +- .../StatisticsTests/MCMCTests/UnivariateHybridMCTest.cs | 2 +- 17 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/FSharpExamples/MCMC.fsx b/src/FSharpExamples/MCMC.fsx index 669de302..6af2e21d 100644 --- a/src/FSharpExamples/MCMC.fsx +++ b/src/FSharpExamples/MCMC.fsx @@ -31,6 +31,7 @@ #r "../../out/lib/Net40/MathNet.Numerics.dll" #r "../../out/lib/Net40/MathNet.Numerics.FSharp.dll" +open MathNet.Numerics open MathNet.Numerics.Random open MathNet.Numerics.Statistics open MathNet.Numerics.Distributions @@ -113,7 +114,7 @@ do let normal = new Normal(mean, stddev) /// Evaluates the log normal distribution. - let npdf x m s = -0.5*(x-m)*(x-m)/(s*s) - 0.5 * log(2.0 * System.Math.PI * s * s) + let npdf x m s = -0.5*(x-m)*(x-m)/(s*s) - 0.5 * log(Constants.Pi2 * s * s) /// Implements the rejection sampling procedure. let ms = new MetropolisHastingsSampler( 0.1, (fun x -> log(normal.Density(x))), @@ -144,7 +145,7 @@ do let normal = new Normal(mean, stddev) /// Evaluates the logarithm of the normal distribution function. - let npdf x m s = -0.5*(x-m)*(x-m)/(s*s) - 0.5 * log(2.0 * System.Math.PI * s * s) + let npdf x m s = -0.5*(x-m)*(x-m)/(s*s) - 0.5 * log(Constants.Pi2 * s * s) /// Samples from a mixture that is biased towards samples larger than x. let mixSample x = diff --git a/src/Numerics/Distributions/Chi.cs b/src/Numerics/Distributions/Chi.cs index 676a2a77..fcbfb7c9 100644 --- a/src/Numerics/Distributions/Chi.cs +++ b/src/Numerics/Distributions/Chi.cs @@ -144,7 +144,7 @@ namespace MathNet.Numerics.Distributions /// public double Mean { - get { return Math.Sqrt(2)*(SpecialFunctions.Gamma((_dof + 1.0)/2.0)/SpecialFunctions.Gamma(_dof/2.0)); } + get { return Constants.Sqrt2*(SpecialFunctions.Gamma((_dof + 1.0)/2.0)/SpecialFunctions.Gamma(_dof/2.0)); } } /// diff --git a/src/Numerics/Distributions/Laplace.cs b/src/Numerics/Distributions/Laplace.cs index 0cd45648..0607a1f3 100644 --- a/src/Numerics/Distributions/Laplace.cs +++ b/src/Numerics/Distributions/Laplace.cs @@ -181,7 +181,7 @@ namespace MathNet.Numerics.Distributions /// public double StdDev { - get { return Math.Sqrt(2.0)*_scale; } + get { return Constants.Sqrt2*_scale; } } /// diff --git a/src/Numerics/Distributions/Normal.cs b/src/Numerics/Distributions/Normal.cs index a465b9c0..046a26b6 100644 --- a/src/Numerics/Distributions/Normal.cs +++ b/src/Numerics/Distributions/Normal.cs @@ -378,7 +378,7 @@ namespace MathNet.Numerics.Distributions /// the inverse cumulative density at . public double InverseCumulativeDistribution(double p) { - return _mean - (_stdDev*Math.Sqrt(2.0)*SpecialFunctions.ErfcInv(2.0*p)); + return _mean - (_stdDev*Constants.Sqrt2*SpecialFunctions.ErfcInv(2.0*p)); } /// diff --git a/src/Numerics/Distributions/Rayleigh.cs b/src/Numerics/Distributions/Rayleigh.cs index 01243d02..2a79a5c2 100644 --- a/src/Numerics/Distributions/Rayleigh.cs +++ b/src/Numerics/Distributions/Rayleigh.cs @@ -171,7 +171,7 @@ namespace MathNet.Numerics.Distributions /// public double Entropy { - get { return 1.0 + Math.Log(_scale/Math.Sqrt(2)) + (Constants.EulerMascheroni/2.0); } + get { return 1.0 + Math.Log(_scale/Constants.Sqrt2) + (Constants.EulerMascheroni/2.0); } } /// diff --git a/src/Numerics/Distributions/Stable.cs b/src/Numerics/Distributions/Stable.cs index 1e7f651a..e3f8855f 100644 --- a/src/Numerics/Distributions/Stable.cs +++ b/src/Numerics/Distributions/Stable.cs @@ -237,7 +237,7 @@ namespace MathNet.Numerics.Distributions { if (_alpha == 2) { - return Math.Sqrt(2.0)*_scale; + return Constants.Sqrt2*_scale; } return Double.PositiveInfinity; @@ -452,7 +452,7 @@ namespace MathNet.Numerics.Distributions var summand = part1*Math.Tan(randTheta); var subtrahend = beta*Math.Log(Constants.PiOver2*randW*Math.Cos(randTheta)/part1); - return location + scale*((2.0/Math.PI)*(summand - subtrahend)); + return location + scale*Constants.TwoInvPi*(summand - subtrahend); } } diff --git a/src/Numerics/LinearAlgebra/Complex/Factorization/UserQR.cs b/src/Numerics/LinearAlgebra/Complex/Factorization/UserQR.cs index c742e92e..c121c687 100644 --- a/src/Numerics/LinearAlgebra/Complex/Factorization/UserQR.cs +++ b/src/Numerics/LinearAlgebra/Complex/Factorization/UserQR.cs @@ -152,7 +152,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Factorization if (row == a.RowCount - 1 || norm.Magnitude == 0) { a.At(row, column, -u[0]); - u[0] = Math.Sqrt(2.0); + u[0] = Constants.Sqrt2; return u; } diff --git a/src/Numerics/LinearAlgebra/Complex32/Factorization/UserQR.cs b/src/Numerics/LinearAlgebra/Complex32/Factorization/UserQR.cs index 9a4a1482..9985d6bc 100644 --- a/src/Numerics/LinearAlgebra/Complex32/Factorization/UserQR.cs +++ b/src/Numerics/LinearAlgebra/Complex32/Factorization/UserQR.cs @@ -147,7 +147,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Factorization if (row == a.RowCount - 1 || norm.Magnitude == 0) { a.At(row, column, -u[0]); - u[0] = (float)Math.Sqrt(2.0); + u[0] = (float)Constants.Sqrt2; return u; } diff --git a/src/Numerics/LinearAlgebra/Double/Factorization/UserQR.cs b/src/Numerics/LinearAlgebra/Double/Factorization/UserQR.cs index 787770c2..e1c7d223 100644 --- a/src/Numerics/LinearAlgebra/Double/Factorization/UserQR.cs +++ b/src/Numerics/LinearAlgebra/Double/Factorization/UserQR.cs @@ -146,7 +146,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Factorization if (row == a.RowCount - 1 || norm == 0) { a.At(row, column, -u[0]); - u[0] = Math.Sqrt(2.0); + u[0] = Constants.Sqrt2; return u; } diff --git a/src/Numerics/LinearAlgebra/Single/Factorization/UserQR.cs b/src/Numerics/LinearAlgebra/Single/Factorization/UserQR.cs index 0103be7b..751dae8d 100644 --- a/src/Numerics/LinearAlgebra/Single/Factorization/UserQR.cs +++ b/src/Numerics/LinearAlgebra/Single/Factorization/UserQR.cs @@ -145,7 +145,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Factorization if (row == a.RowCount - 1 || norm == 0) { a.At(row, column, -u[0]); - u[0] = (float)Math.Sqrt(2.0); + u[0] = (float)Constants.Sqrt2; return u; } diff --git a/src/Numerics/Providers/LinearAlgebra/ManagedLinearAlgebraProvider.Double.cs b/src/Numerics/Providers/LinearAlgebra/ManagedLinearAlgebraProvider.Double.cs index 87954a93..d22dc12e 100644 --- a/src/Numerics/Providers/LinearAlgebra/ManagedLinearAlgebraProvider.Double.cs +++ b/src/Numerics/Providers/LinearAlgebra/ManagedLinearAlgebraProvider.Double.cs @@ -1720,7 +1720,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra if (row == rowCount - 1 || norm == 0) { a[index] = -work[tmp]; - work[tmp] = Math.Sqrt(2.0); + work[tmp] = Constants.Sqrt2; return; } diff --git a/src/Numerics/Providers/LinearAlgebra/ManagedLinearAlgebraProvider.Single.cs b/src/Numerics/Providers/LinearAlgebra/ManagedLinearAlgebraProvider.Single.cs index ccdf6049..0db34a31 100644 --- a/src/Numerics/Providers/LinearAlgebra/ManagedLinearAlgebraProvider.Single.cs +++ b/src/Numerics/Providers/LinearAlgebra/ManagedLinearAlgebraProvider.Single.cs @@ -1721,7 +1721,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra if (row == rowCount - 1 || norm == 0) { a[index] = -work[tmp]; - work[tmp] = (float) Math.Sqrt(2.0); + work[tmp] = (float) Constants.Sqrt2; return; } diff --git a/src/Numerics/Trigonometry.cs b/src/Numerics/Trigonometry.cs index ebf04f9d..9728d8c1 100644 --- a/src/Numerics/Trigonometry.cs +++ b/src/Numerics/Trigonometry.cs @@ -473,7 +473,7 @@ namespace MathNet.Numerics { if (value.IsZero()) { - return Math.PI / 2.0; + return Constants.PiOver2; } var inv = Complex.ImaginaryOne / value; diff --git a/src/UnitTests/DistributionTests/Continuous/ChiTests.cs b/src/UnitTests/DistributionTests/Continuous/ChiTests.cs index 72773980..da700fe9 100644 --- a/src/UnitTests/DistributionTests/Continuous/ChiTests.cs +++ b/src/UnitTests/DistributionTests/Continuous/ChiTests.cs @@ -124,7 +124,7 @@ namespace MathNet.Numerics.UnitTests.DistributionTests.Continuous public void ValidateMean(double dof) { var n = new Chi(dof); - Assert.AreEqual(Math.Sqrt(2) * (SpecialFunctions.Gamma((dof + 1.0) / 2.0) / SpecialFunctions.Gamma(dof / 2.0)), n.Mean); + Assert.AreEqual(Constants.Sqrt2 * (SpecialFunctions.Gamma((dof + 1.0) / 2.0) / SpecialFunctions.Gamma(dof / 2.0)), n.Mean); } /// diff --git a/src/UnitTests/DistributionTests/Continuous/LaplaceTests.cs b/src/UnitTests/DistributionTests/Continuous/LaplaceTests.cs index aaba5930..5eb5225d 100644 --- a/src/UnitTests/DistributionTests/Continuous/LaplaceTests.cs +++ b/src/UnitTests/DistributionTests/Continuous/LaplaceTests.cs @@ -192,7 +192,7 @@ namespace MathNet.Numerics.UnitTests.DistributionTests.Continuous public void ValidateStdDev(double location, double scale) { var n = new Laplace(location, scale); - Assert.AreEqual(Math.Sqrt(2.0) * scale, n.StdDev); + Assert.AreEqual(Constants.Sqrt2 * scale, n.StdDev); } /// diff --git a/src/UnitTests/DistributionTests/Continuous/RayleighTests.cs b/src/UnitTests/DistributionTests/Continuous/RayleighTests.cs index 4f212d14..c30ed9fc 100644 --- a/src/UnitTests/DistributionTests/Continuous/RayleighTests.cs +++ b/src/UnitTests/DistributionTests/Continuous/RayleighTests.cs @@ -167,7 +167,7 @@ namespace MathNet.Numerics.UnitTests.DistributionTests.Continuous public void ValidateEntropy(double scale) { var n = new Rayleigh(scale); - Assert.AreEqual(1.0 + Math.Log(scale / Math.Sqrt(2)) + (Constants.EulerMascheroni / 2.0), n.Entropy); + Assert.AreEqual(1.0 + Math.Log(scale / Constants.Sqrt2) + (Constants.EulerMascheroni / 2.0), n.Entropy); } /// diff --git a/src/UnitTests/StatisticsTests/MCMCTests/UnivariateHybridMCTest.cs b/src/UnitTests/StatisticsTests/MCMCTests/UnivariateHybridMCTest.cs index 27238180..fe750892 100644 --- a/src/UnitTests/StatisticsTests/MCMCTests/UnivariateHybridMCTest.cs +++ b/src/UnitTests/StatisticsTests/MCMCTests/UnivariateHybridMCTest.cs @@ -141,7 +141,7 @@ namespace MathNet.Numerics.UnitTests.StatisticsTests.McmcTests double deviationRation = Math.Pow(stats.StandardDeviation/sdv, 2); //Approximating chi-square with normal distribution. (Degree of freedom is large) - double deviationConvergence = 3*Math.Sqrt(2)/Math.Sqrt(effective); + double deviationConvergence = 3*Constants.Sqrt2/Math.Sqrt(effective); Assert.AreEqual(deviationRation, 1, deviationConvergence, "Standard Deivation"); } }