Repository: commons-math Updated Branches: refs/heads/master cec35baf0 -> e3eff1e3a
MATH-1416: Depend on "Commons Numbers" (module "commons-numbers-gamma"). Transitional state (until issue NUMBERS-39 is done). Project: http://git-wip-us.apache.org/repos/asf/commons-math/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-math/commit/e3eff1e3 Tree: http://git-wip-us.apache.org/repos/asf/commons-math/tree/e3eff1e3 Diff: http://git-wip-us.apache.org/repos/asf/commons-math/diff/e3eff1e3 Branch: refs/heads/master Commit: e3eff1e3a426f8931ad23a3d7a7e790adabe9f48 Parents: cec35ba Author: Gilles <er...@apache.org> Authored: Sat May 13 21:21:24 2017 +0200 Committer: Gilles <er...@apache.org> Committed: Sat May 13 21:21:24 2017 +0200 ---------------------------------------------------------------------- pom.xml | 6 ++++ .../math4/distribution/BetaDistribution.java | 4 +-- .../math4/distribution/GammaDistribution.java | 26 +++++++------- .../distribution/NakagamiDistribution.java | 11 +++--- .../math4/distribution/PoissonDistribution.java | 10 +++--- .../distribution/SaddlePointExpansion.java | 4 +-- .../math4/distribution/TDistribution.java | 6 ++-- .../math4/distribution/WeibullDistribution.java | 6 ++-- .../apache/commons/math4/special/BesselJ.java | 5 +-- .../org/apache/commons/math4/special/Beta.java | 36 +++++++++++--------- .../org/apache/commons/math4/special/Erf.java | 14 ++++---- .../commons/math4/util/CombinatoricsUtils.java | 8 ++--- .../integration/gauss/LaguerreTest.java | 4 +-- .../distribution/GammaDistributionTest.java | 6 ++-- .../distribution/WeibullDistributionTest.java | 10 +++--- .../commons/math4/util/FactorialLogTest.java | 6 ++-- 16 files changed, 86 insertions(+), 76 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-math/blob/e3eff1e3/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index 579c108..a4996d5 100644 --- a/pom.xml +++ b/pom.xml @@ -368,6 +368,12 @@ <dependency> <groupId>org.apache.commons</groupId> + <artifactId>commons-numbers-gamma</artifactId> + <version>1.0-SNAPSHOT</version> + </dependency> + + <dependency> + <groupId>org.apache.commons</groupId> <artifactId>commons-rng-client-api</artifactId> <version>1.0</version> </dependency> http://git-wip-us.apache.org/repos/asf/commons-math/blob/e3eff1e3/src/main/java/org/apache/commons/math4/distribution/BetaDistribution.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/math4/distribution/BetaDistribution.java b/src/main/java/org/apache/commons/math4/distribution/BetaDistribution.java index aaf89d8..5ca3321 100644 --- a/src/main/java/org/apache/commons/math4/distribution/BetaDistribution.java +++ b/src/main/java/org/apache/commons/math4/distribution/BetaDistribution.java @@ -19,7 +19,7 @@ package org.apache.commons.math4.distribution; import org.apache.commons.math4.exception.NumberIsTooSmallException; import org.apache.commons.math4.exception.util.LocalizedFormats; import org.apache.commons.math4.special.Beta; -import org.apache.commons.math4.special.Gamma; +import org.apache.commons.numbers.gamma.LogGamma; import org.apache.commons.math4.util.FastMath; import org.apache.commons.rng.UniformRandomProvider; import org.apache.commons.rng.sampling.distribution.ContinuousSampler; @@ -74,7 +74,7 @@ public class BetaDistribution extends AbstractRealDistribution { double inverseCumAccuracy) { this.alpha = alpha; this.beta = beta; - z = Gamma.logGamma(alpha) + Gamma.logGamma(beta) - Gamma.logGamma(alpha + beta); + z = LogGamma.value(alpha) + LogGamma.value(beta) - LogGamma.value(alpha + beta); solverAbsoluteAccuracy = inverseCumAccuracy; } http://git-wip-us.apache.org/repos/asf/commons-math/blob/e3eff1e3/src/main/java/org/apache/commons/math4/distribution/GammaDistribution.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/math4/distribution/GammaDistribution.java b/src/main/java/org/apache/commons/math4/distribution/GammaDistribution.java index 77d296b..4b66e21 100644 --- a/src/main/java/org/apache/commons/math4/distribution/GammaDistribution.java +++ b/src/main/java/org/apache/commons/math4/distribution/GammaDistribution.java @@ -18,7 +18,8 @@ package org.apache.commons.math4.distribution; import org.apache.commons.math4.exception.NotStrictlyPositiveException; import org.apache.commons.math4.exception.util.LocalizedFormats; -import org.apache.commons.math4.special.Gamma; +import org.apache.commons.numbers.gamma.LanczosApproximation; +import org.apache.commons.numbers.gamma.RegularizedGamma; import org.apache.commons.math4.util.FastMath; import org.apache.commons.rng.UniformRandomProvider; import org.apache.commons.rng.sampling.distribution.ContinuousSampler; @@ -31,6 +32,7 @@ import org.apache.commons.rng.sampling.distribution.AhrensDieterMarsagliaTsangGa * @see <a href="http://mathworld.wolfram.com/GammaDistribution.html">Gamma distribution (MathWorld)</a> */ public class GammaDistribution extends AbstractRealDistribution { + private static final double LANCZOS_G = LanczosApproximation.g(); /** * Default inverse cumulative probability accuracy. * @since 2.1 @@ -44,7 +46,7 @@ public class GammaDistribution extends AbstractRealDistribution { private final double scale; /** * The constant value of {@code shape + g + 0.5}, where {@code g} is the - * Lanczos constant {@link Gamma#LANCZOS_G}. + * Lanczos constant {@link LanczosApproximation#g()}. */ private final double shiftedShape; /** @@ -136,18 +138,18 @@ public class GammaDistribution extends AbstractRealDistribution { this.shape = shape; this.scale = scale; this.solverAbsoluteAccuracy = inverseCumAccuracy; - this.shiftedShape = shape + Gamma.LANCZOS_G + 0.5; + this.shiftedShape = shape + LANCZOS_G + 0.5; final double aux = FastMath.E / (2.0 * FastMath.PI * shiftedShape); - this.densityPrefactor2 = shape * FastMath.sqrt(aux) / Gamma.lanczos(shape); + this.densityPrefactor2 = shape * FastMath.sqrt(aux) / LanczosApproximation.value(shape); this.logDensityPrefactor2 = FastMath.log(shape) + 0.5 * FastMath.log(aux) - - FastMath.log(Gamma.lanczos(shape)); + FastMath.log(LanczosApproximation.value(shape)); this.densityPrefactor1 = this.densityPrefactor2 / scale * FastMath.pow(shiftedShape, -shape) * - FastMath.exp(shape + Gamma.LANCZOS_G); + FastMath.exp(shape + LANCZOS_G); this.logDensityPrefactor1 = this.logDensityPrefactor2 - FastMath.log(scale) - FastMath.log(shiftedShape) * shape + - shape + Gamma.LANCZOS_G; - this.minY = shape + Gamma.LANCZOS_G - FastMath.log(Double.MAX_VALUE); + shape + LANCZOS_G; + this.minY = shape + LANCZOS_G - FastMath.log(Double.MAX_VALUE); this.maxLogY = FastMath.log(Double.MAX_VALUE) / (shape - 1.0); } @@ -222,8 +224,7 @@ public class GammaDistribution extends AbstractRealDistribution { */ final double aux1 = (y - shiftedShape) / shiftedShape; final double aux2 = shape * (FastMath.log1p(aux1) - aux1); - final double aux3 = -y * (Gamma.LANCZOS_G + 0.5) / shiftedShape + - Gamma.LANCZOS_G + aux2; + final double aux3 = -y * (LANCZOS_G + 0.5) / shiftedShape + LANCZOS_G + aux2; return densityPrefactor2 / x * FastMath.exp(aux3); } /* @@ -248,8 +249,7 @@ public class GammaDistribution extends AbstractRealDistribution { */ final double aux1 = (y - shiftedShape) / shiftedShape; final double aux2 = shape * (FastMath.log1p(aux1) - aux1); - final double aux3 = -y * (Gamma.LANCZOS_G + 0.5) / shiftedShape + - Gamma.LANCZOS_G + aux2; + final double aux3 = -y * (LANCZOS_G + 0.5) / shiftedShape + LANCZOS_G + aux2; return logDensityPrefactor2 - FastMath.log(x) + aux3; } /* @@ -279,7 +279,7 @@ public class GammaDistribution extends AbstractRealDistribution { if (x <= 0) { ret = 0; } else { - ret = Gamma.regularizedGammaP(shape, x / scale); + ret = RegularizedGamma.P.value(shape, x / scale); } return ret; http://git-wip-us.apache.org/repos/asf/commons-math/blob/e3eff1e3/src/main/java/org/apache/commons/math4/distribution/NakagamiDistribution.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/math4/distribution/NakagamiDistribution.java b/src/main/java/org/apache/commons/math4/distribution/NakagamiDistribution.java index 5f7e405..c26b2e6 100644 --- a/src/main/java/org/apache/commons/math4/distribution/NakagamiDistribution.java +++ b/src/main/java/org/apache/commons/math4/distribution/NakagamiDistribution.java @@ -19,7 +19,8 @@ package org.apache.commons.math4.distribution; import org.apache.commons.math4.exception.NotStrictlyPositiveException; import org.apache.commons.math4.exception.NumberIsTooSmallException; import org.apache.commons.math4.exception.util.LocalizedFormats; -import org.apache.commons.math4.special.Gamma; +import org.apache.commons.numbers.gamma.Gamma; +import org.apache.commons.numbers.gamma.RegularizedGamma; import org.apache.commons.math4.util.FastMath; /** @@ -112,26 +113,26 @@ public class NakagamiDistribution extends AbstractRealDistribution { if (x <= 0) { return 0.0; } - return 2.0 * FastMath.pow(mu, mu) / (Gamma.gamma(mu) * FastMath.pow(omega, mu)) * + return 2.0 * FastMath.pow(mu, mu) / (Gamma.value(mu) * FastMath.pow(omega, mu)) * FastMath.pow(x, 2 * mu - 1) * FastMath.exp(-mu * x * x / omega); } /** {@inheritDoc} */ @Override public double cumulativeProbability(double x) { - return Gamma.regularizedGammaP(mu, mu * x * x / omega); + return RegularizedGamma.P.value(mu, mu * x * x / omega); } /** {@inheritDoc} */ @Override public double getNumericalMean() { - return Gamma.gamma(mu + 0.5) / Gamma.gamma(mu) * FastMath.sqrt(omega / mu); + return Gamma.value(mu + 0.5) / Gamma.value(mu) * FastMath.sqrt(omega / mu); } /** {@inheritDoc} */ @Override public double getNumericalVariance() { - double v = Gamma.gamma(mu + 0.5) / Gamma.gamma(mu); + double v = Gamma.value(mu + 0.5) / Gamma.value(mu); return omega * (1 - 1 / mu * v * v); } http://git-wip-us.apache.org/repos/asf/commons-math/blob/e3eff1e3/src/main/java/org/apache/commons/math4/distribution/PoissonDistribution.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/math4/distribution/PoissonDistribution.java b/src/main/java/org/apache/commons/math4/distribution/PoissonDistribution.java index ba18f1e..2f13188 100644 --- a/src/main/java/org/apache/commons/math4/distribution/PoissonDistribution.java +++ b/src/main/java/org/apache/commons/math4/distribution/PoissonDistribution.java @@ -18,7 +18,7 @@ package org.apache.commons.math4.distribution; import org.apache.commons.math4.exception.NotStrictlyPositiveException; import org.apache.commons.math4.exception.util.LocalizedFormats; -import org.apache.commons.math4.special.Gamma; +import org.apache.commons.numbers.gamma.RegularizedGamma; import org.apache.commons.math4.util.FastMath; import org.apache.commons.math4.util.MathUtils; import org.apache.commons.rng.UniformRandomProvider; @@ -52,9 +52,9 @@ public class PoissonDistribution extends AbstractIntegerDistribution { /** * Maximum number of iterations for cumulative probability. Cumulative * probabilities are estimated using either Lanczos series approximation - * of {@link Gamma#regularizedGammaP(double, double, double, int)} + * of {@link RegularizedGamma.P#value(double, double, double, int)} * or continued fraction approximation of - * {@link Gamma#regularizedGammaQ(double, double, double, int)}. + * {@link RegularizedGamma.Q#value(double, double, double, int)}. */ private final int maxIterations; @@ -166,8 +166,8 @@ public class PoissonDistribution extends AbstractIntegerDistribution { if (x == Integer.MAX_VALUE) { return 1; } - return Gamma.regularizedGammaQ((double) x + 1, mean, epsilon, - maxIterations); + return RegularizedGamma.Q.value((double) x + 1, mean, epsilon, + maxIterations); } /** http://git-wip-us.apache.org/repos/asf/commons-math/blob/e3eff1e3/src/main/java/org/apache/commons/math4/distribution/SaddlePointExpansion.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/math4/distribution/SaddlePointExpansion.java b/src/main/java/org/apache/commons/math4/distribution/SaddlePointExpansion.java index aea0e3c..7def8fb 100644 --- a/src/main/java/org/apache/commons/math4/distribution/SaddlePointExpansion.java +++ b/src/main/java/org/apache/commons/math4/distribution/SaddlePointExpansion.java @@ -16,7 +16,7 @@ */ package org.apache.commons.math4.distribution; -import org.apache.commons.math4.special.Gamma; +import org.apache.commons.numbers.gamma.LogGamma; import org.apache.commons.math4.util.FastMath; import org.apache.commons.math4.util.MathUtils; @@ -110,7 +110,7 @@ final class SaddlePointExpansion { if (FastMath.floor(z2) == z2) { ret = EXACT_STIRLING_ERRORS[(int) z2]; } else { - ret = Gamma.logGamma(z + 1.0) - (z + 0.5) * FastMath.log(z) + + ret = LogGamma.value(z + 1.0) - (z + 0.5) * FastMath.log(z) + z - HALF_LOG_2_PI; } } else { http://git-wip-us.apache.org/repos/asf/commons-math/blob/e3eff1e3/src/main/java/org/apache/commons/math4/distribution/TDistribution.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/math4/distribution/TDistribution.java b/src/main/java/org/apache/commons/math4/distribution/TDistribution.java index e510556..39fbd21 100644 --- a/src/main/java/org/apache/commons/math4/distribution/TDistribution.java +++ b/src/main/java/org/apache/commons/math4/distribution/TDistribution.java @@ -19,7 +19,7 @@ package org.apache.commons.math4.distribution; import org.apache.commons.math4.exception.NotStrictlyPositiveException; import org.apache.commons.math4.exception.util.LocalizedFormats; import org.apache.commons.math4.special.Beta; -import org.apache.commons.math4.special.Gamma; +import org.apache.commons.numbers.gamma.LogGamma; import org.apache.commons.math4.util.FastMath; /** @@ -75,9 +75,9 @@ public class TDistribution extends AbstractRealDistribution { final double n = degreesOfFreedom; final double nPlus1Over2 = (n + 1) / 2; - factor = Gamma.logGamma(nPlus1Over2) - + factor = LogGamma.value(nPlus1Over2) - 0.5 * (FastMath.log(FastMath.PI) + FastMath.log(n)) - - Gamma.logGamma(n / 2); + LogGamma.value(n / 2); } /** http://git-wip-us.apache.org/repos/asf/commons-math/blob/e3eff1e3/src/main/java/org/apache/commons/math4/distribution/WeibullDistribution.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/math4/distribution/WeibullDistribution.java b/src/main/java/org/apache/commons/math4/distribution/WeibullDistribution.java index 844bf4a..e0a9dbb 100644 --- a/src/main/java/org/apache/commons/math4/distribution/WeibullDistribution.java +++ b/src/main/java/org/apache/commons/math4/distribution/WeibullDistribution.java @@ -20,7 +20,7 @@ package org.apache.commons.math4.distribution; import org.apache.commons.math4.exception.NotStrictlyPositiveException; import org.apache.commons.math4.exception.OutOfRangeException; import org.apache.commons.math4.exception.util.LocalizedFormats; -import org.apache.commons.math4.special.Gamma; +import org.apache.commons.numbers.gamma.LogGamma; import org.apache.commons.math4.util.FastMath; /** @@ -224,7 +224,7 @@ public class WeibullDistribution extends AbstractRealDistribution { final double sh = getShape(); final double sc = getScale(); - return sc * FastMath.exp(Gamma.logGamma(1 + (1 / sh))); + return sc * FastMath.exp(LogGamma.value(1 + (1 / sh))); } /** @@ -252,7 +252,7 @@ public class WeibullDistribution extends AbstractRealDistribution { final double sc = getScale(); final double mn = getNumericalMean(); - return (sc * sc) * FastMath.exp(Gamma.logGamma(1 + (2 / sh))) - + return (sc * sc) * FastMath.exp(LogGamma.value(1 + (2 / sh))) - (mn * mn); } http://git-wip-us.apache.org/repos/asf/commons-math/blob/e3eff1e3/src/main/java/org/apache/commons/math4/special/BesselJ.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/math4/special/BesselJ.java b/src/main/java/org/apache/commons/math4/special/BesselJ.java index 9b41479..0e25eff 100644 --- a/src/main/java/org/apache/commons/math4/special/BesselJ.java +++ b/src/main/java/org/apache/commons/math4/special/BesselJ.java @@ -17,6 +17,7 @@ package org.apache.commons.math4.special; +import org.apache.commons.numbers.gamma.Gamma; import org.apache.commons.math4.analysis.UnivariateFunction; import org.apache.commons.math4.exception.ConvergenceException; import org.apache.commons.math4.exception.MathIllegalArgumentException; @@ -283,7 +284,7 @@ public class BesselJ } if (alpha != 0) { tempa = FastMath.pow(halfx, alpha) / - (alpha * Gamma.gamma(alpha)); + (alpha * Gamma.value(alpha)); } tempb = 0; if (x + 1 > 1) { @@ -620,7 +621,7 @@ public class BesselJ // --------------------------------------------------------------------- if (FastMath.abs(alpha) > 1e-16) { - sum *= Gamma.gamma(alpha) * FastMath.pow(x * 0.5, -alpha); + sum *= Gamma.value(alpha) * FastMath.pow(x * 0.5, -alpha); } tempa = ENMTEN; if (sum > 1) { http://git-wip-us.apache.org/repos/asf/commons-math/blob/e3eff1e3/src/main/java/org/apache/commons/math4/special/Beta.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/math4/special/Beta.java b/src/main/java/org/apache/commons/math4/special/Beta.java index 9e40cd8..9355099 100644 --- a/src/main/java/org/apache/commons/math4/special/Beta.java +++ b/src/main/java/org/apache/commons/math4/special/Beta.java @@ -16,6 +16,8 @@ */ package org.apache.commons.math4.special; +import org.apache.commons.numbers.gamma.Gamma; +import org.apache.commons.numbers.gamma.LogGamma; import org.apache.commons.math4.exception.NumberIsTooSmallException; import org.apache.commons.math4.exception.OutOfRangeException; import org.apache.commons.math4.util.ContinuedFraction; @@ -249,11 +251,11 @@ public class Beta { final double x = (a - 1.0) + (b - 1.0); if (x <= 0.5) { - return Gamma.logGamma1p(1.0 + x); + return org.apache.commons.math4.special.Gamma.logGamma1p(1.0 + x); } else if (x <= 1.5) { - return Gamma.logGamma1p(x) + FastMath.log1p(x); + return org.apache.commons.math4.special.Gamma.logGamma1p(x) + FastMath.log1p(x); } else { - return Gamma.logGamma1p(x - 1.0) + FastMath.log(x * (1.0 + x)); + return org.apache.commons.math4.special.Gamma.logGamma1p(x - 1.0) + FastMath.log(x * (1.0 + x)); } } @@ -415,7 +417,7 @@ public class Beta { prod *= ared / (1.0 + ared / b); } return (FastMath.log(prod) - n * FastMath.log(b)) + - (Gamma.logGamma(ared) + + (LogGamma.value(ared) + logGammaMinusLogGammaSum(ared, b)); } else { double prod1 = 1.0; @@ -434,12 +436,12 @@ public class Beta { } return FastMath.log(prod1) + FastMath.log(prod2) + - (Gamma.logGamma(ared) + - (Gamma.logGamma(bred) - + (LogGamma.value(ared) + + (LogGamma.value(bred) - logGammaSum(ared, bred))); } else { return FastMath.log(prod1) + - Gamma.logGamma(ared) + + LogGamma.value(ared) + logGammaMinusLogGammaSum(ared, b); } } @@ -453,29 +455,29 @@ public class Beta { prod *= bred / (a + bred); } return FastMath.log(prod) + - (Gamma.logGamma(a) + - (Gamma.logGamma(bred) - + (LogGamma.value(a) + + (LogGamma.value(bred) - logGammaSum(a, bred))); } else { - return Gamma.logGamma(a) + + return LogGamma.value(a) + logGammaMinusLogGammaSum(a, b); } } else { - return Gamma.logGamma(a) + - Gamma.logGamma(b) - + return LogGamma.value(a) + + LogGamma.value(b) - logGammaSum(a, b); } } else { if (b >= 10.0) { - return Gamma.logGamma(a) + + return LogGamma.value(a) + logGammaMinusLogGammaSum(a, b); } else { // The following command is the original NSWC implementation. - // return Gamma.logGamma(a) + - // (Gamma.logGamma(b) - Gamma.logGamma(a + b)); + // return LogGamma.value(a) + + // (LogGamma.value(b) - LogGamma.value(a + b)); // The following command turns out to be more accurate. - return FastMath.log(Gamma.gamma(a) * Gamma.gamma(b) / - Gamma.gamma(a + b)); + return FastMath.log(Gamma.value(a) * Gamma.value(b) / + Gamma.value(a + b)); } } } http://git-wip-us.apache.org/repos/asf/commons-math/blob/e3eff1e3/src/main/java/org/apache/commons/math4/special/Erf.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/math4/special/Erf.java b/src/main/java/org/apache/commons/math4/special/Erf.java index 14aede7..47d6ed4 100644 --- a/src/main/java/org/apache/commons/math4/special/Erf.java +++ b/src/main/java/org/apache/commons/math4/special/Erf.java @@ -17,11 +17,11 @@ package org.apache.commons.math4.special; import org.apache.commons.math4.util.FastMath; +import org.apache.commons.numbers.gamma.RegularizedGamma; /** * This is a utility class that provides computation methods related to the * error functions. - * */ public class Erf { @@ -48,7 +48,7 @@ public class Erf { * <p>erf(x) = 2/√π <sub>0</sub>∫<sup>x</sup> e<sup>-t<span style="position: relative; top: -.5em">2</span></sup>dt </p> * * <p>This implementation computes erf(x) using the - * {@link Gamma#regularizedGammaP(double, double, double, int) regularized gamma function}, + * {@link RegularizedGamma.P.value(double, double, double, int) regularized gamma function}, * following <a href="http://mathworld.wolfram.com/Erf.html"> Erf</a>, equation (3)</p> * * <p>The value returned is always between -1 and 1 (inclusive). @@ -60,13 +60,13 @@ public class Erf { * @return the error function erf(x) * @throws org.apache.commons.math4.exception.MaxCountExceededException * if the algorithm fails to converge. - * @see Gamma#regularizedGammaP(double, double, double, int) + * @see RegularizedGamma.P#value(double, double, double, int) */ public static double erf(double x) { if (FastMath.abs(x) > 40) { return x > 0 ? 1 : -1; } - final double ret = Gamma.regularizedGammaP(0.5, x * x, 1.0e-15, 10000); + final double ret = RegularizedGamma.P.value(0.5, x * x, 1.0e-15, 10000); return x < 0 ? -ret : ret; } @@ -78,7 +78,7 @@ public class Erf { * = 1 - {@link #erf(double) erf(x)} </p> * * <p>This implementation computes erfc(x) using the - * {@link Gamma#regularizedGammaQ(double, double, double, int) regularized gamma function}, + * {@link RegularizedGamma.Q#value(double, double, double, int) regularized gamma function}, * following <a href="http://mathworld.wolfram.com/Erf.html"> Erf</a>, equation (3).</p> * * <p>The value returned is always between 0 and 2 (inclusive). @@ -90,14 +90,14 @@ public class Erf { * @return the complementary error function erfc(x) * @throws org.apache.commons.math4.exception.MaxCountExceededException * if the algorithm fails to converge. - * @see Gamma#regularizedGammaQ(double, double, double, int) + * @see RegularizedGamma.Q#value(double, double, double, int) * @since 2.2 */ public static double erfc(double x) { if (FastMath.abs(x) > 40) { return x > 0 ? 0 : 2; } - final double ret = Gamma.regularizedGammaQ(0.5, x * x, 1.0e-15, 10000); + final double ret = RegularizedGamma.Q.value(0.5, x * x, 1.0e-15, 10000); return x < 0 ? 2 - ret : ret; } http://git-wip-us.apache.org/repos/asf/commons-math/blob/e3eff1e3/src/main/java/org/apache/commons/math4/util/CombinatoricsUtils.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/math4/util/CombinatoricsUtils.java b/src/main/java/org/apache/commons/math4/util/CombinatoricsUtils.java index a7c40b7..dcb7aa9 100644 --- a/src/main/java/org/apache/commons/math4/util/CombinatoricsUtils.java +++ b/src/main/java/org/apache/commons/math4/util/CombinatoricsUtils.java @@ -24,7 +24,7 @@ import org.apache.commons.math4.exception.MathArithmeticException; import org.apache.commons.math4.exception.NotPositiveException; import org.apache.commons.math4.exception.NumberIsTooLargeException; import org.apache.commons.math4.exception.util.LocalizedFormats; -import org.apache.commons.math4.special.Gamma; +import org.apache.commons.numbers.gamma.LogGamma; /** * Combinatorial utilities. @@ -462,8 +462,8 @@ public final class CombinatoricsUtils { /** * Class for computing the natural logarithm of the factorial of {@code n}. * It allows to allocate a cache of precomputed values. - * In case of cache miss, computation is preformed by a call to - * {@link Gamma#logGamma(double)}. + * In case of cache miss, computation is performed by a call to + * {@link LogGamma#value(double)}. */ public static final class FactorialLog { /** @@ -547,7 +547,7 @@ public final class CombinatoricsUtils { } // Delegate. - return Gamma.logGamma(n + 1); + return LogGamma.value(n + 1); } } } http://git-wip-us.apache.org/repos/asf/commons-math/blob/e3eff1e3/src/test/java/org/apache/commons/math4/analysis/integration/gauss/LaguerreTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/math4/analysis/integration/gauss/LaguerreTest.java b/src/test/java/org/apache/commons/math4/analysis/integration/gauss/LaguerreTest.java index 87b502b..1e8c65e 100644 --- a/src/test/java/org/apache/commons/math4/analysis/integration/gauss/LaguerreTest.java +++ b/src/test/java/org/apache/commons/math4/analysis/integration/gauss/LaguerreTest.java @@ -17,7 +17,7 @@ package org.apache.commons.math4.analysis.integration.gauss; import org.apache.commons.math4.analysis.UnivariateFunction; -import org.apache.commons.math4.special.Gamma; +import org.apache.commons.numbers.gamma.Gamma; import org.apache.commons.math4.util.FastMath; import org.junit.Assert; import org.junit.Test; @@ -44,7 +44,7 @@ public class LaguerreTest { final GaussIntegrator integrator = factory.laguerre(7); final double s = integrator.integrate(f); - Assert.assertEquals(1d, Gamma.gamma(t) / s, tol); + Assert.assertEquals(1d, Gamma.value(t) / s, tol); } } } http://git-wip-us.apache.org/repos/asf/commons-math/blob/e3eff1e3/src/test/java/org/apache/commons/math4/distribution/GammaDistributionTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/math4/distribution/GammaDistributionTest.java b/src/test/java/org/apache/commons/math4/distribution/GammaDistributionTest.java index 437ed5a..d796f7e 100644 --- a/src/test/java/org/apache/commons/math4/distribution/GammaDistributionTest.java +++ b/src/test/java/org/apache/commons/math4/distribution/GammaDistributionTest.java @@ -24,7 +24,7 @@ import java.io.InputStreamReader; import org.apache.commons.math4.distribution.GammaDistribution; import org.apache.commons.math4.exception.NotStrictlyPositiveException; -import org.apache.commons.math4.special.Gamma; +import org.apache.commons.numbers.gamma.LanczosApproximation; import org.apache.commons.math4.stat.descriptive.SummaryStatistics; import org.apache.commons.math4.util.FastMath; import org.junit.Assert; @@ -189,8 +189,8 @@ public class GammaDistributionTest extends RealDistributionAbstractTest { if (Double.isNaN(x) || (x <= 0.0)) { ret = Double.NaN; } else { - double sum = Gamma.lanczos(x); - double tmp = x + Gamma.LANCZOS_G + .5; + double sum = LanczosApproximation.value(x); + double tmp = x + LanczosApproximation.g() + .5; ret = ((x + .5) * FastMath.log(tmp)) - tmp + HALF_LOG_2_PI + FastMath.log(sum / x); } http://git-wip-us.apache.org/repos/asf/commons-math/blob/e3eff1e3/src/test/java/org/apache/commons/math4/distribution/WeibullDistributionTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/math4/distribution/WeibullDistributionTest.java b/src/test/java/org/apache/commons/math4/distribution/WeibullDistributionTest.java index 78a6113..1f5846d 100644 --- a/src/test/java/org/apache/commons/math4/distribution/WeibullDistributionTest.java +++ b/src/test/java/org/apache/commons/math4/distribution/WeibullDistributionTest.java @@ -19,7 +19,7 @@ package org.apache.commons.math4.distribution; import org.apache.commons.math4.distribution.WeibullDistribution; import org.apache.commons.math4.exception.NotStrictlyPositiveException; -import org.apache.commons.math4.special.Gamma; +import org.apache.commons.numbers.gamma.LogGamma; import org.apache.commons.math4.util.FastMath; import org.junit.Assert; import org.junit.Test; @@ -112,15 +112,15 @@ public class WeibullDistributionTest extends RealDistributionAbstractTest { dist = new WeibullDistribution(2.5, 3.5); // In R: 3.5*gamma(1+(1/2.5)) (or emperically: mean(rweibull(10000, 2.5, 3.5))) - Assert.assertEquals(dist.getNumericalMean(), 3.5 * FastMath.exp(Gamma.logGamma(1 + (1 / 2.5))), tol); + Assert.assertEquals(dist.getNumericalMean(), 3.5 * FastMath.exp(LogGamma.value(1 + (1 / 2.5))), tol); Assert.assertEquals(dist.getNumericalVariance(), (3.5 * 3.5) * - FastMath.exp(Gamma.logGamma(1 + (2 / 2.5))) - + FastMath.exp(LogGamma.value(1 + (2 / 2.5))) - (dist.getNumericalMean() * dist.getNumericalMean()), tol); dist = new WeibullDistribution(10.4, 2.222); - Assert.assertEquals(dist.getNumericalMean(), 2.222 * FastMath.exp(Gamma.logGamma(1 + (1 / 10.4))), tol); + Assert.assertEquals(dist.getNumericalMean(), 2.222 * FastMath.exp(LogGamma.value(1 + (1 / 10.4))), tol); Assert.assertEquals(dist.getNumericalVariance(), (2.222 * 2.222) * - FastMath.exp(Gamma.logGamma(1 + (2 / 10.4))) - + FastMath.exp(LogGamma.value(1 + (2 / 10.4))) - (dist.getNumericalMean() * dist.getNumericalMean()), tol); } } http://git-wip-us.apache.org/repos/asf/commons-math/blob/e3eff1e3/src/test/java/org/apache/commons/math4/util/FactorialLogTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/math4/util/FactorialLogTest.java b/src/test/java/org/apache/commons/math4/util/FactorialLogTest.java index 980a834..6e0c40f 100644 --- a/src/test/java/org/apache/commons/math4/util/FactorialLogTest.java +++ b/src/test/java/org/apache/commons/math4/util/FactorialLogTest.java @@ -17,7 +17,7 @@ package org.apache.commons.math4.util; import org.apache.commons.math4.exception.NotPositiveException; -import org.apache.commons.math4.special.Gamma; +import org.apache.commons.numbers.gamma.LogGamma; import org.junit.Assert; import org.junit.Test; @@ -43,9 +43,9 @@ public class FactorialLogTest { final CombinatoricsUtils.FactorialLog f = CombinatoricsUtils.FactorialLog.create(); // Starting at 21 because for smaller arguments, there is no delegation to the - // "Gamma" class. + // "LogGamma" class. for (int i = 21; i < 10000; i++) { - final double expected = Gamma.logGamma(i + 1); + final double expected = LogGamma.value(i + 1); Assert.assertEquals(i + "! ", expected, f.value(i), 0d); }