You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ah...@apache.org on 2021/12/20 22:23:53 UTC

[commons-statistics] 01/02: STATISTICS-36: Update accuracy of inverse probability function

This is an automated email from the ASF dual-hosted git repository.

aherbert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-statistics.git

commit 5b9cc0a230421ac01ca19c5de8b8cfeb535d7a27
Author: Alex Herbert <ah...@apache.org>
AuthorDate: Mon Dec 20 22:15:43 2021 +0000

    STATISTICS-36: Update accuracy of inverse probability function
    
    Changed the accuracy tolerances used by the BrentSolver. Inversion
    should be accurate to close to 1 ULP.
    
    Update test tolerances for the following distributions using the default
    inverse probability method:
    
    Beta
    ChiSquared
    F
    Gamma
    Nakagami
    T
    
    Fix the Beta distribution sampling test. Extreme parameterisations
    cannot be sampled using uniform expected bins due to low precision of
    values close to 1.
    
    More accurate test tolerances required:
    
    - SF values to be added for beta, chi-squared, gamma and t
    distributions.
    - Log density for F distribution test.
    - Extended precision of the test data for Nakagami(1.5, 2) including SF
    values.
    - Updated T distribution test for infinite degrees of freedom. The
    normal distribution from matlab more closely agrees with the current
    implementation than scipy or R.
---
 .../AbstractContinuousDistribution.java            | 60 +++++++---------------
 .../distribution/BetaDistributionTest.java         | 32 +++++++-----
 .../distribution/ChiSquaredDistributionTest.java   |  5 ++
 .../statistics/distribution/FDistributionTest.java |  5 ++
 .../distribution/GammaDistributionTest.java        |  5 ++
 .../distribution/NakagamiDistributionTest.java     |  3 +-
 .../statistics/distribution/TDistributionTest.java |  5 ++
 .../statistics/distribution/test.beta.1.properties |  1 +
 .../distribution/test.beta.10.properties           |  1 +
 .../distribution/test.beta.11.properties           |  1 +
 .../distribution/test.beta.12.properties           |  1 +
 .../distribution/test.beta.13.properties           |  1 +
 .../distribution/test.beta.14.properties           |  1 +
 .../distribution/test.beta.15.properties           |  3 +-
 .../distribution/test.beta.16.properties           |  1 +
 .../distribution/test.beta.17.properties           |  1 +
 .../distribution/test.beta.18.properties           |  1 +
 .../distribution/test.beta.19.properties           |  1 +
 .../statistics/distribution/test.beta.2.properties |  1 +
 .../distribution/test.beta.20.properties           |  1 +
 .../distribution/test.beta.21.properties           |  3 +-
 .../distribution/test.beta.22.properties           |  1 +
 .../distribution/test.beta.23.properties           |  3 +-
 .../distribution/test.beta.24.properties           |  1 +
 .../distribution/test.beta.25.properties           |  1 +
 .../statistics/distribution/test.beta.3.properties |  1 +
 .../statistics/distribution/test.beta.4.properties |  1 +
 .../statistics/distribution/test.beta.5.properties |  3 +-
 .../statistics/distribution/test.beta.6.properties |  1 +
 .../statistics/distribution/test.beta.7.properties |  1 +
 .../statistics/distribution/test.beta.8.properties |  1 +
 .../statistics/distribution/test.beta.9.properties |  1 +
 .../distribution/test.chisquared.1.properties      |  7 ++-
 .../distribution/test.chisquared.2.properties      | 22 ++++----
 .../distribution/test.chisquared.3.properties      | 20 +++++---
 .../distribution/test.chisquared.4.properties      | 21 +++++---
 .../statistics/distribution/test.f.1.properties    |  2 -
 .../statistics/distribution/test.f.2.properties    |  2 -
 .../statistics/distribution/test.f.3.properties    |  2 -
 .../statistics/distribution/test.f.4.properties    |  2 -
 .../statistics/distribution/test.f.5.properties    |  2 -
 .../statistics/distribution/test.f.6.properties    |  6 +--
 .../distribution/test.gamma.1.properties           |  9 +++-
 .../distribution/test.nakagami.1.properties        | 17 ++++++
 .../distribution/test.nakagami.2.properties        | 30 ++++++-----
 .../distribution/test.nakagami.3.properties        | 19 ++++++-
 .../statistics/distribution/test.t.1.properties    | 25 ++++++---
 .../statistics/distribution/test.t.3.properties    |  4 +-
 .../statistics/distribution/test.t.4.properties    | 41 ++++++++++-----
 49 files changed, 232 insertions(+), 147 deletions(-)

diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/AbstractContinuousDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/AbstractContinuousDistribution.java
index d6670fd..1df9d03 100644
--- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/AbstractContinuousDistribution.java
+++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/AbstractContinuousDistribution.java
@@ -42,51 +42,29 @@ import org.apache.commons.rng.sampling.distribution.InverseTransformContinuousSa
  */
 abstract class AbstractContinuousDistribution
     implements ContinuousDistribution {
-    // XXX Values copied from defaults in class
-    // "o.a.c.math4.analysis.solvers.BaseAbstractUnivariateSolver"
 
-    // Note:
-    // Probability distributions may have very small CDF values.
-    // This creates issues when using the Brent solver.
+    // Notes on the inverse probability implementation:
     //
-    // 1. It cannot identify bracketing if the multiplication of the two
-    // end points creates a signed zero since the condition uses:
-    //   lower * upper < 0
-    // It should be changed to Double.compare(lower * upper, 0.0) < 0.
-    //
-    // 2. Function value accuracy determines if the Brent solver performs a
-    // search. Ideally set to zero to force a search (unless one of the the
-    // initial bracket values is correct). This can result in functions
-    // that evaluate very small p to raise a no-bracket exception due to [1].
-    //
-    // 3. Solver absolute accuracy is the minimum absolute difference between
-    // bracketing points to continue the search. To invert very small probability
-    // values (which map to very small x values) requires a very small absolute
-    // accuracy otherwise the search stops too soon. Set to zero to force
-    // stopping criteria based only on the relative difference between points.
-    //
-    // Note:
     // The Brent solver does not allow a stopping criteria for the proximity
-    // to the root. It is hard coded to 1 ULP (CDF(x) - p == 0). Thus we
-    // search until there is a small relative difference between the upper
-    // and lower bracket of the root.
-
-    // TODO:
-    // Extract the Brent solver code into this class and fix it for the known
-    // issues. These can be transferred back into the original class when the
-    // best solution is known.
-    //
-    // Changes to this class affect many samplers. Altering the accuracy
-    // thresholds can cause any test that uses the inverse CDF to fail. This
-    // includes sampling tests for distributions with use the inverse
-    // transform sampler which have been coded with fixed seeds that work.
+    // to the root; it uses equality to zero within 1 ULP. The search is
+    // iterated until there is a small difference between the upper
+    // and lower bracket of the root, expressed as a combination of relative
+    // and absolute thresholds.
 
-    /** BrentSolver relative accuracy. */
-    private static final double SOLVER_RELATIVE_ACCURACY = 1e-14;
-    /** BrentSolver absolute accuracy. */
-    private static final double SOLVER_ABSOLUTE_ACCURACY = 1e-9;
-    /** BrentSolver function value accuracy. */
-    private static final double SOLVER_FUNCTION_VALUE_ACCURACY = 1e-15;
+    /** BrentSolver relative accuracy.
+     * This is used with {@code tol = 2 * relEps * abs(b) + absEps} so the minimum
+     * non-zero value with an effect is half of machine epsilon (2^-53). */
+    private static final double SOLVER_RELATIVE_ACCURACY = 0x1.0p-53;
+    /** BrentSolver absolute accuracy.
+     * This is used with {@code tol = 2 * relEps * abs(b) + absEps} so set to MIN_VALUE
+     * so that when the relative epsilon has no effect (as b is too small) the tolerance
+     * is at least 1 ULP for sub-normal numbers. */
+    private static final double SOLVER_ABSOLUTE_ACCURACY = Double.MIN_VALUE;
+    /** BrentSolver function value accuracy.
+     * Determines if the Brent solver performs a search. It is not used during the search.
+     * Set to a very low value to search using Brent's method unless
+     * the starting point is correct, or within 1 ULP for sub-normal probabilities. */
+    private static final double SOLVER_FUNCTION_VALUE_ACCURACY = Double.MIN_VALUE;
 
     /** Cached value of the median. */
     private double median = Double.NaN;
diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/BetaDistributionTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/BetaDistributionTest.java
index e9aef2b..f18c632 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/BetaDistributionTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/BetaDistributionTest.java
@@ -47,8 +47,7 @@ class BetaDistributionTest extends BaseContinuousDistributionTest {
 
     @Override
     protected double getRelativeTolerance() {
-        // Limited by the inverse SF mapping
-        return 5e-9;
+        return 5e-14;
     }
 
     @Override
@@ -163,7 +162,8 @@ class BetaDistributionTest extends BaseContinuousDistributionTest {
 
                 final double gT = gTest(betaDistribution, observed);
                 Assertions.assertFalse(gT < level,
-                    () -> "G goodness-of-fit (" + gT + ") test rejected null at alpha = " + level);
+                    () -> String.format("Beta(%s, %s): G goodness-of-fit (%s) test rejected null at alpha = %s",
+                                        alpha, beta, gT, level));
             }
         }
     }
@@ -171,22 +171,30 @@ class BetaDistributionTest extends BaseContinuousDistributionTest {
     private static double gTest(final ContinuousDistribution expectedDistribution, final double[] values) {
         final int numBins = values.length / 30;
         final double[] breaks = new double[numBins];
-        for (int b = 0; b < breaks.length; b++) {
-            breaks[b] = expectedDistribution.inverseCumulativeProbability((double) b / numBins);
+        for (int b = 0; b < numBins; b++) {
+            breaks[b] = expectedDistribution.inverseCumulativeProbability((double) (b + 1) / numBins);
         }
 
         final long[] observed = new long[numBins];
         for (final double value : values) {
-            int b = 0;
-            do {
-                b++;
-            } while (b < numBins && value >= breaks[b]);
-
-            observed[b - 1]++;
+            int b = Arrays.binarySearch(breaks, value);
+            if (b < 0) {
+                b = -(b + 1);
+            }
+            observed[b]++;
         }
 
         final double[] expected = new double[numBins];
-        Arrays.fill(expected, (double) values.length / numBins);
+        // This is not uniform for extreme parameterisations.
+        // E.g. beta(1000, 0.1).cdf(0.9999999999999999) = 0.94676.
+        // This is below the 29/30 = 0.96667 for the penultimate bin.
+        // So fill the expected using the CDF.
+        double x0 = 0;
+        for (int b = 0; b < numBins; b++) {
+            final double x1 = breaks[b];
+            expected[b] = expectedDistribution.probability(x0, x1);
+            x0 = x1;
+        }
 
         return new GTest().gTest(expected, observed);
     }
diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ChiSquaredDistributionTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ChiSquaredDistributionTest.java
index 89d2472..57daa18 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ChiSquaredDistributionTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ChiSquaredDistributionTest.java
@@ -43,6 +43,11 @@ class ChiSquaredDistributionTest extends BaseContinuousDistributionTest {
         return new String[] {"DegreesOfFreedom"};
     }
 
+    @Override
+    protected double getRelativeTolerance() {
+        return 5e-15;
+    }
+
     //-------------------- Additional test cases -------------------------------
 
     @Test
diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/FDistributionTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/FDistributionTest.java
index a0230ac..44c57d8 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/FDistributionTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/FDistributionTest.java
@@ -46,6 +46,11 @@ class FDistributionTest extends BaseContinuousDistributionTest {
         return new String[] {"NumeratorDegreesOfFreedom", "DenominatorDegreesOfFreedom"};
     }
 
+    @Override
+    protected double getRelativeTolerance() {
+        return 1e-14;
+    }
+
     //-------------------- Additional test cases -------------------------------
 
     @Test
diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/GammaDistributionTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/GammaDistributionTest.java
index af06961..2bd0d99 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/GammaDistributionTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/GammaDistributionTest.java
@@ -55,6 +55,11 @@ class GammaDistributionTest extends BaseContinuousDistributionTest {
         return new String[] {"Shape", "Scale"};
     }
 
+    @Override
+    protected double getRelativeTolerance() {
+        return 1e-15;
+    }
+
     //-------------------- Additional test cases -------------------------------
 
     @Test
diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/NakagamiDistributionTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/NakagamiDistributionTest.java
index 46aefff..d21b34a 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/NakagamiDistributionTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/NakagamiDistributionTest.java
@@ -33,8 +33,7 @@ class NakagamiDistributionTest extends BaseContinuousDistributionTest {
 
     @Override
     protected double getRelativeTolerance() {
-        // Limited by the inverse CDF
-        return 1e-8;
+        return 5e-15;
     }
 
     @Override
diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TDistributionTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TDistributionTest.java
index eba7d54..ab27303 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TDistributionTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TDistributionTest.java
@@ -43,6 +43,11 @@ class TDistributionTest extends BaseContinuousDistributionTest {
         return new String[] {"DegreesOfFreedom"};
     }
 
+    @Override
+    protected double getRelativeTolerance() {
+        return 1e-15;
+    }
+
     //-------------------- Additional test cases -------------------------------
 
     /**
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.1.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.1.properties
index 07ad349..f034f92 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.1.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.1.properties
@@ -22,3 +22,4 @@ upper = 1
 cdf.points = -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1
 cdf.values = 0  0 0.406385093936276 0.439709190223346 0.462804186115552 0.482120045609328 0.500000000000000 0.517879954390672 0.537195813884448 0.560290809776654 0.593614906063724 1 1
 pdf.values = 0  Infinity 0.442988958666524 0.263938762316795 0.206639715373253 0.183240320487425 0.176630277977874 0.183240320487425 0.206639715373253 0.263938762316795 0.442988958666524 Infinity 0
+sf.values = 1 1 0.593614906063724 0.560290809776654 0.537195813884448 0.517879954390672 0.500000000000000 0.482120045609328 0.462804186115552 0.439709190223346 0.406385093936276 0 0
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.10.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.10.properties
index 05096b0..fbe8b60 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.10.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.10.properties
@@ -22,3 +22,4 @@ upper = 1
 cdf.points = -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1
 cdf.values = 0  0 0.626625082597741 0.804984471899925 0.898778484206134 0.950264436880598 0.977796095859523 0.991483736629099 0.997455625383593 0.999522385942406 0.999971488851370 1 1
 pdf.values = 0  Inf 2.52142232809988  1.25219806739988  0.684938469046825 0.373544048607390 0.193349510480697 0.0903696114115064  0.0352965948694063  0.00978279740156159 0.00115291373026972 0 0
+sf.values = 1 1 0.373374917402260 0.195015528100075 0.101221515793866 0.0497355631194020  0.0222039041404773  0.00851626337090129 0.00254437461640681 0.000477614057594006  2.85111486302981e-05  0 0
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.11.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.11.properties
index d3b2e56..2231ec7 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.11.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.11.properties
@@ -22,3 +22,4 @@ upper = 1
 cdf.points = -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1
 cdf.values = 0  0 0.0104807417937856  0.0220672314570715  0.0350389048801824  0.0497997834943236  0.0669670084631926  0.0875564634445192  0.113431849434787 0.148660077479215 0.205671765275719 1 1
 pdf.values = 0  0.100000000000000 0.109946584245135 0.122241596067866 0.137851585017117 0.158366702750946 0.186606598307362 0.228110884138870 0.295522716855071 0.425669961260392 0.794328234724282 Inf 0
+sf.values = 1 1 0.989519258206214 0.977932768542929 0.964961095119818 0.950200216505676 0.933032991536807 0.912443536555481 0.886568150565213 0.851339922520785 0.794328234724282 0 0
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.12.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.12.properties
index 7cf9863..7abc208 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.12.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.12.properties
@@ -22,3 +22,4 @@ upper = 1
 cdf.points = -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1
 cdf.values = 0 0 0.051316701949486218 0.10557280900008409 0.16333997346592444 0.22540333075851654 0.2928932188134527 0.36754446796632401 0.45227744249483381 0.55278640450004213 0.68377223398316211 1 1
 pdf.values = 0 0.5 0.52704627669472992 0.55901699437494745 0.59761430466719689 0.64549722436790291 0.70710678118654768 0.79056941504209488 0.9128709291752769 1.1180339887498951 1.58113883008419 Inf 0
+sf.values = 1 1 0.948683298050514 0.894427190999916 0.836660026534076 0.774596669241483 0.707106781186547 0.632455532033676 0.547722557505166 0.447213595499958 0.316227766016838 0 0
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.13.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.13.properties
index 90ab21a..d867bca 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.13.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.13.properties
@@ -22,3 +22,4 @@ upper = 1
 cdf.points = -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1
 cdf.values = 0.0, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.0
 pdf.values = 0 1 1 1 1 1 1 1 1 1 1 1 0
+sf.values = 1 1 0.900000000000000 0.800000000000000 0.700000000000000 0.600000000000000 0.500000000000000 0.400000000000000 0.300000000000000 0.200000000000000 0.100000000000000 0 0
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.14.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.14.properties
index 70bc714..e238b8b 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.14.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.14.properties
@@ -22,3 +22,4 @@ upper = 1
 cdf.points = -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1
 cdf.values = 0 0 0.19000000000000006 0.35999999999999999 0.51000000000000023 0.64000000000000001 0.75 0.83999999999999997 0.90999999999999992 0.95999999999999996 0.98999999999999999 1 1
 pdf.values = 0 2 1.8 1.6000000000000001 1.3999999999999999 1.2 1 0.80000000000000004 0.60000000000000009 0.39999999999999991 0.19999999999999996 0 0
+sf.values = 1 1 0.810000000000000 0.640000000000000 0.490000000000000 0.360000000000000 0.250000000000000 0.160000000000000 0.0900000000000000  0.0400000000000000  0.0100000000000000  0 0
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.15.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.15.properties
index d9509a6..5dc0e16 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.15.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.15.properties
@@ -14,8 +14,6 @@
 # limitations under the License.
 
 parameters = 1.0 4.0
-# Limited by inverse sf mapping
-tolerance.relative = 5e-8
 # Computed using Matlab
 mean = 0.20000000000000001
 variance = 0.026666666666666672
@@ -24,3 +22,4 @@ upper = 1
 cdf.points = -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1
 cdf.values = 0 0 0.34389999999999987 0.59040000000000026 0.75990000000000002 0.87040000000000006 0.9375 0.97440000000000004 0.9919 0.99839999999999995 0.99990000000000001 1 1
 pdf.values = 0 4 2.9160000000000008 2.0480000000000005 1.3719999999999999 0.8640000000000001 0.50000000000000022 0.25600000000000012 0.10800000000000005 0.031999999999999994 0.0039999999999999983 0 0
+sf.values = 1 1 0.656100000000000 0.409600000000000 0.240100000000000 0.129600000000000 0.0625000000000000  0.0256000000000000  0.00810000000000000 0.00160000000000000 9.99999999999999e-05  0 0
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.16.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.16.properties
index 57892ff..1eaf518 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.16.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.16.properties
@@ -22,3 +22,4 @@ upper = 1
 cdf.points = -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1
 cdf.values = 0 0 0.00058554921172346416 0.0025085760862129224 0.0060900720265878658 0.011791774834096561 0.020315358886352223 0.032809851251190306 0.051372078895221711 0.080552883677552423 0.13418222415053294 1 1
 pdf.values = 0 0 0.012094124266964851 0.026893151134930546 0.045491023055648561 0.069681349210416327 0.10263362906904888 0.15055318353165442 0.22755249197840488 0.37458956590914555 0.78638495237703931 Inf 0
+sf.values = 1 1 0.999414450788277 0.997491423913787 0.993909927973412 0.988208225165904 0.979684641113648 0.967190148748810 0.948627921104778 0.919447116322448 0.865817775849467 0 0
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.17.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.17.properties
index 469c8fd..bca61be 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.17.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.17.properties
@@ -22,3 +22,4 @@ upper = 1
 cdf.points = -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1
 cdf.values = 0 0 0.0038825370469605129 0.016130089900092535 0.0378409694858131 0.070483996910219962 0.1161165235168156 0.17780780835622126 0.26057454736802566 0.37390096630005898 0.54146973927558506 1 1
 pdf.values = 0 0 0.079056941504209499 0.16770509831248426 0.26892643710023856 0.38729833462074181 0.53033008588991071 0.71151247353788538 0.95851447563404069 1.3416407864998741 2.1345374206136567 Inf 0
+sf.values = 1 1 0.996117462953040 0.983869910099907 0.962159030514187 0.929516003089780 0.883883476483184 0.822192191643779 0.739425452631974 0.626099033699941 0.458530260724415 0 0
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.18.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.18.properties
index 23335fe..2a56be7 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.18.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.18.properties
@@ -22,3 +22,4 @@ upper = 1
 cdf.points = -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1
 cdf.values = 0 0 0.010000000000000009 0.040000000000000029 0.089999999999999983 0.16000000000000003 0.25000000000000006 0.35999999999999999 0.48999999999999977 0.64000000000000012 0.81000000000000005 1 1
 pdf.values = 0 0 0.20000000000000007 0.40000000000000002 0.59999999999999987 0.80000000000000004 1 1.2 1.3999999999999999 1.6000000000000001 1.8 2 0
+sf.values = 1 1 0.990000000000000 0.960000000000000 0.910000000000000 0.840000000000000 0.750000000000000 0.640000000000000 0.510000000000000 0.360000000000000 0.190000000000000 0 0
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.19.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.19.properties
index 80d4731..e4c3a7b 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.19.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.19.properties
@@ -22,3 +22,4 @@ upper = 1
 cdf.points = -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1
 cdf.values = 0 0 0.028000000000000008 0.10400000000000008 0.2159999999999998 0.35200000000000004 0.5 0.64799999999999991 0.78400000000000003 0.89600000000000002 0.97199999999999998 1 1
 pdf.values = 0 0 0.54000000000000004 0.96000000000000008 1.2599999999999998 1.4400000000000002 1.5 1.4400000000000002 1.26 0.95999999999999985 0.53999999999999981 0 0
+sf.values = 1 1 0.972000000000000 0.896000000000000 0.784000000000000 0.648000000000000 0.500000000000000 0.352000000000000 0.216000000000000 0.104000000000000 0.0280000000000000  0 0
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.2.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.2.properties
index c0e1c86..66edffa 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.2.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.2.properties
@@ -22,3 +22,4 @@ upper = 1
 cdf.points = -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1
 cdf.values = 0  0 0.704833622051221 0.759304219445319 0.795176530367368 0.823494838536657 0.848001712399770 0.870603436980005 0.892658587836406 0.915640640375004 0.942366288315790 1 1
 pdf.values = 0  Infinity 0.739458664410644 0.420303655461325 0.311944266317603 0.260079151351645 0.233065049073820 0.221140881157234 0.222272786172717 0.241401058813832 0.307055512274369 Infinity 0
+sf.values = 1 1 0.295166377948779 0.240695780554681 0.204823469632632 0.176505161463343 0.151998287600230 0.129396563019995 0.107341412163595 0.0843593596249964  0.0576337116842096  0 0
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.20.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.20.properties
index 32c8053..b2c9d57 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.20.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.20.properties
@@ -22,3 +22,4 @@ upper = 1
 cdf.points = -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1
 cdf.values = 0 0 0.081459999999999991 0.26272000000000001 0.47177999999999987 0.6630400000000003 0.81250000000000011 0.91295999999999999 0.96921999999999997 0.99328000000000005 0.99953999999999998 1 1
 pdf.values = 0 0 1.458 2.0479999999999996 2.0579999999999994 1.7279999999999998 1.25 0.7679999999999999 0.378 0.12799999999999995 0.017999999999999985 0 0
+sf.values = 1 1 0.918540000000000 0.737280000000000 0.528220000000000 0.336960000000000 0.187500000000000 0.0870400000000000  0.0307800000000000  0.00671999999999999 0.000460000000000000  0 0
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.21.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.21.properties
index c60ad15..9d87d65 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.21.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.21.properties
@@ -14,8 +14,6 @@
 # limitations under the License.
 
 parameters = 4.0 0.1
-# Limited by CDF inverse mapping test
-tolerance.relative = 1e-7
 # Computed using Matlab
 mean = 0.97560975609756106
 variance = 0.0046657568440820708
@@ -24,3 +22,4 @@ upper = 1
 cdf.points = -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1
 cdf.values = 0 0 3.2171282691062582e-06 5.5920702707254974e-05 0.00031043754736771468 0.0010887195953766145 0.002995933980950227 0.0071555887773963782 0.015771491525200323 0.033804105852091329 0.076500887893677594 1 1
 pdf.values = 0 0 0.00013122124829656863 0.001167162759255986 0.0044421984013840775 0.012096682222928267 0.027839371884979505 0.058806073487464187 0.12097828236031892 0.26011499456731058 0.69111441539656093 Inf 0
+sf.values = 1 1 0.999996782871731 0.999944079297293 0.999689562452632 0.998911280404623 0.997004066019050 0.992844411222604 0.984228508474800 0.966195894147909 0.923499112106322 0 0
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.22.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.22.properties
index 9e554fc..19381c2 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.22.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.22.properties
@@ -22,3 +22,4 @@ upper = 1
 cdf.points = -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1
 cdf.values = 0 0 2.8511148630298162e-05 0.00047761405759400596 0.002544374616406807 0.0085162633709012919 0.022203904140477276 0.049735563119401985 0.10122151579386635 0.1950155281000755 0.37337491740225981 1 1
 pdf.values = 0 0 0.0011529137302697221 0.0097827974015615871 0.035296594869406304 0.090369611411506442 0.19334951048069668 0.37354404860738988 0.68493846904682498 1.2521980673998829 2.5214223280998826 Inf 0
+sf.values = 1 1 0.999971488851370 0.999522385942406 0.997455625383593 0.991483736629099 0.977796095859523 0.950264436880598 0.898778484206134 0.804984471899925 0.626625082597740 0 0
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.23.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.23.properties
index 40ae745..cdc9362 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.23.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.23.properties
@@ -14,8 +14,6 @@
 # limitations under the License.
 
 parameters = 4.0 1.0
-# Limited by CDF inverse mapping test
-tolerance.relative = 1e-7
 # Computed using Matlab
 mean = 0.80000000000000004
 variance = 0.026666666666666672
@@ -24,3 +22,4 @@ upper = 1
 cdf.points = -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1
 cdf.values = 0 0 0.00010000000000000006 0.0016000000000000007 0.0080999999999999944 0.025600000000000001 0.062500000000000028 0.12959999999999997 0.24009999999999992 0.40960000000000019 0.65610000000000024 1 1
 pdf.values = 0 0 0.0040000000000000018 0.032000000000000021 0.10799999999999996 0.25600000000000012 0.50000000000000022 0.8640000000000001 1.3719999999999999 2.0480000000000005 2.9160000000000008 4 0
+sf.values = 1 1 0.999900000000000 0.998400000000000 0.991900000000000 0.974400000000000 0.937500000000000 0.870400000000000 0.759900000000000 0.590400000000000 0.343900000000000 0 0
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.24.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.24.properties
index cd0a91b..d782b4e 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.24.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.24.properties
@@ -22,3 +22,4 @@ upper = 1
 cdf.points = -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1
 cdf.values = 0 0 0.00046000000000000056 0.0067200000000000037 0.030779999999999971 0.087040000000000006 0.18749999999999992 0.33695999999999976 0.52822000000000002 0.73728000000000005 0.91854000000000002 1 1
 pdf.values = 0 0 0.018000000000000016 0.12800000000000006 0.37799999999999967 0.7679999999999999 1.25 1.7279999999999998 2.0579999999999994 2.0479999999999996 1.4579999999999993 0 0
+sf.values = 1 1 0.999540000000000 0.993280000000000 0.969220000000000 0.912960000000000 0.812500000000000 0.663040000000000 0.471780000000000 0.262720000000000 0.0814600000000000  0 0
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.25.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.25.properties
index bf8b88b..8211a13 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.25.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.25.properties
@@ -22,3 +22,4 @@ upper = 1
 cdf.points = -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1
 cdf.values = 0 0 0.0027280000000000021 0.033344000000000061 0.12603599999999995 0.28979200000000022 0.49999999999999967 0.71020799999999973 0.87396399999999996 0.96665599999999996 0.99727200000000005 1 1
 pdf.values = 0 0 0.10206000000000011 0.57344000000000062 1.2965399999999996 1.9353600000000017 2.1875000000000018 1.9353600000000017 1.2965400000000007 0.57344000000000017 0.10206000000000001 0 0
+sf.values = 1 1 0.997272000000000 0.966656000000000 0.873964000000000 0.710208000000000 0.500000000000000 0.289792000000000 0.126036000000000 0.0333440000000000  0.00272800000000000 0 0
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.3.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.3.properties
index 5e80d84..f0a3f7d 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.3.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.3.properties
@@ -22,3 +22,4 @@ upper = 1
 cdf.points = -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1
 cdf.values = 0  0 0.794328234724282 0.851339922520785 0.886568150565213 0.912443536555481 0.933032991536807 0.950200216505676 0.964961095119818 0.977932768542929 0.989519258206214 1 1
 pdf.values = 0  Infinity 0.794328234724282 0.425669961260392 0.295522716855071 0.228110884138870 0.186606598307362 0.158366702750946 0.137851585017117 0.122241596067866 0.109946584245135 0.100000000000000 0
+sf.values = 1 1 0.205671765275719 0.148660077479215 0.113431849434787 0.0875564634445192  0.0669670084631926  0.0497997834943236  0.0350389048801824  0.0220672314570715  0.0104807417937856  0 0
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.4.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.4.properties
index 842b234..f0ba541 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.4.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.4.properties
@@ -22,3 +22,4 @@ upper = 1
 cdf.points = -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1
 cdf.values = 0  0 0.865817775849467 0.919447116322448 0.948627921104778 0.967190148748810 0.979684641113648 0.988208225165904 0.993909927973412 0.997491423913787 0.999414450788277 1 1
 pdf.values = 0  Infinity 0.786384952377039 0.374589565909146 0.227552491978405 0.150553183531654 0.102633629069049 0.0696813492104163  0.0454910230556486  0.0268931511349305  0.0120941242669649  0 0
+sf.values = 1 1 0.134182224150533 0.0805528836775524  0.0513720788952217  0.0328098512511903  0.0203153588863522  0.0117917748340966  0.00609007202658787 0.00250857608621292 0.000585549211723463  0 0
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.5.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.5.properties
index baa8be7..9194496 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.5.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.5.properties
@@ -14,8 +14,6 @@
 # limitations under the License.
 
 parameters = 0.1 4.0
-# Limited by inverse sf mapping
-tolerance.relative = 5e-8
 # Computed using Matlab
 mean = 0.024390243902439
 variance = 0.004665756844082
@@ -24,3 +22,4 @@ upper = 1
 cdf.points = -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1
 cdf.values = 0  0 0.923499112106323 0.966195894147909 0.984228508474800 0.992844411222604 0.997004066019050 0.998911280404623 0.999689562452632 0.999944079297293 0.999996782871731 1 1
 pdf.values = 0  Infinity 0.691114415396561 0.260114994567311 0.120978282360319 0.0588060734874642  0.0278393718849795  0.0120966822229283  0.00444219840138409 0.00116716275925599 0.000131221248296568  0 0
+sf.values = 1 1 0.0765008878936770  0.0338041058520913  0.0157714915252003  0.00715558877739638 0.00299593398095023 0.00108871959537661 0.000310437547367715  5.59207027072550e-05  3.21712826910625e-06  0 0
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.6.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.6.properties
index ff7bed5..aeaacde 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.6.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.6.properties
@@ -22,3 +22,4 @@ upper = 1
 cdf.points = -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1
 cdf.values = 0  0 0.0576337116842096  0.0843593596249964  0.107341412163594 0.129396563019995 0.151998287600230 0.176505161463343 0.204823469632632 0.240695780554681 0.295166377948779 1 1
 pdf.values = 0  Infinity 0.307055512274369 0.241401058813832 0.222272786172717 0.221140881157234 0.233065049073820 0.260079151351645 0.311944266317603 0.420303655461325 0.739458664410645 Infinity 0
+sf.values = 1 1 0.942366288315790 0.915640640375004 0.892658587836406 0.870603436980005 0.848001712399770 0.823494838536657 0.795176530367368 0.759304219445319 0.704833622051221 0 0
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.7.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.7.properties
index 75ea975..d4c3cc0 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.7.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.7.properties
@@ -22,3 +22,4 @@ upper = 1
 cdf.points = -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1
 cdf.values = 0  0 0.204832764699133 0.295167235300867 0.369010119565545 0.435905783151025 0.500000000000000 0.564094216848975 0.630989880434455 0.704832764699133 0.795167235300867 1 1
 pdf.values = 0  Infinity 1.06103295394597  0.795774715459477 0.694609118042857 0.649747334361397 0.636619772367582 0.649747334361397 0.694609118042857 0.795774715459477 1.06103295394597  Infinity 0
+sf.values = 1 1 0.795167235300867 0.704832764699133 0.630989880434455 0.564094216848975 0.500000000000000 0.435905783151025 0.369010119565545 0.295167235300867 0.204832764699133 0 0
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.8.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.8.properties
index 6081a60..5f1c437 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.8.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.8.properties
@@ -22,3 +22,4 @@ upper = 1
 cdf.points = -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1
 cdf.values = 0  0 0.316227766016838 0.447213595499958 0.547722557505166 0.632455532033676 0.707106781186547 0.774596669241483 0.836660026534075 0.894427190999916 0.948683298050514 1 1
 pdf.values = 0  Infinity 1.58113883008419  1.11803398874990  0.912870929175277 0.790569415042095 0.707106781186548 0.645497224367903 0.597614304667197 0.559016994374948 0.527046276694730 0.500000000000000 0
+sf.values = 1 1 0.683772233983162 0.552786404500042 0.452277442494834 0.367544467966324 0.292893218813453 0.225403330758517 0.163339973465925 0.105572809000084 0.0513167019494862  0 0
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.9.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.9.properties
index c580a5a..4f096f6 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.9.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.beta.9.properties
@@ -22,3 +22,4 @@ upper = 1
 cdf.points = -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1
 cdf.values = 0  0 0.458530260724415 0.626099033699941 0.739425452631974 0.822192191643779 0.883883476483184 0.929516003089780 0.962159030514187 0.983869910099907 0.996117462953040 1 1
 pdf.values = 0  Inf 2.13453742061366  1.34164078649987  0.958514475634041 0.711512473537885 0.530330085889911 0.387298334620742 0.268926437100239 0.167705098312484 0.0790569415042095  0 0
+sf.values = 1 1 0.541469739275585 0.373900966300059 0.260574547368026 0.177807808356221 0.116116523516816 0.0704839969102200  0.0378409694858131  0.0161300899000925  0.00388253704696051 0 0
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.chisquared.1.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.chisquared.1.properties
index 68a8e26..8f1c73e 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.chisquared.1.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.chisquared.1.properties
@@ -14,8 +14,6 @@
 # limitations under the License.
 
 parameters = 5.0
-# Limited by the CDF inverse mapping.
-tolerance.relative = 1e-9
 mean = 5
 variance = 10
 lower = 0
@@ -37,6 +35,11 @@ pdf.values = \
   0.00043363007636076326013 0.00412780610309495914201 \
   0.00999340341044542557203 0.01932464389366777765544 \
   0.03684600892155488055524 0.0
+sf.values = \
+  1.0000000000000000000000 0.9990000000000024416025 0.9900000000000115374377 \
+  0.9749999999999774402681 0.9500000000001627142865 0.9000000000002820188527 \
+  0.0010000000000142579299 0.0099999999999545435142 0.0250000000003000877324 \
+  0.0500000000003160416373 0.1000000000000411948253 0.0000000000000000000000
 # Created using WolframAlpha
 cdf.hp.points = 1e-7, 4e-7, 9e-8
 cdf.hp.values = 1.6820882879388572e-19, 5.382681944688393e-18, 1.292572946953654e-19
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.chisquared.2.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.chisquared.2.properties
index 78a1d39..3edd20f 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.chisquared.2.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.chisquared.2.properties
@@ -24,19 +24,19 @@ cdf.points = \
   5.4729171974573481e+00 2.1752548001836174e+00 1.1343475235077167e+00 \
   5.3186460485168197e-01 1.5263422781837696e-01                    Inf
 cdf.values = \
-  0, 0.001, 0.01, 0.025, 0.05, 0.1, 0.999, 0.990, 0.975, 0.950, 0.900, 1
+  0.0000000000000000000000 0.0010000000000000000208 0.0100000000000000054123 \
+  0.0250000000000000048572 0.0500000000000000166533 0.1000000000000000471845 \
+  0.9989999999999999991118 0.9899999999999999911182 0.9749999999999998667732 \
+  0.9499999999999998445688 0.9000000000000000222045 1.0000000000000000000000
 pdf.values = \
   Inf 4.2774292299259904e+55 4.2774292299259657e+36 \
   1.1757707938231455e+29 2.2426048160994400e+23 4.2774292299259878e+17 \
   6.3950485031051161e-04 7.9908952673546779e-03 2.4960391325813031e-02 \
   6.9275023117637585e-02 2.7413671677094120e-01 0.0000000000000000e+00
-
-# TODO: Sampling test fails
-# The sampler is OK. The inverse CDF to generate the quartiles fails.
-disable.sample = true
-
-# TODO: CDF inverse test fails
-disable.cdf.inverse = true
-
-# TODO: SF inverse test fails
-disable.sf.inverse = true
+sf.values = \
+  1.00000000000000000000000 0.99899999999999999911182 \
+  0.98999999999999999111822 0.97499999999999997779554 \
+  0.94999999999999995559108 0.90000000000000002220446 \
+  0.00099999999999999980398 0.00999999999999998979983 \
+  0.02500000000000001873501 0.05000000000000005134781 \
+  0.09999999999999997779554 0.00000000000000000000000
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.chisquared.3.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.chisquared.3.properties
index 26d6a85..f4360de 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.chisquared.3.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.chisquared.3.properties
@@ -14,21 +14,27 @@
 # limitations under the License.
 
 parameters = 2.0
-# Limited by CDF inverse mapping test
-tolerance.relative = 1.5e-8
 mean = 2.0
 variance = 4.0
 lower = 0
 # Computed with R version 1.8.1 (linux version)
 cdf.points = \
-   0.000000000000000000  0.002001000667167067  0.020100671707002884 \
-   0.050635615968579753  0.102586588775101073  0.210721031315652618 \
-   13.815510557964271854 9.210340371976181828  7.377758908227870727 \
-   5.991464547107979932  4.605170185988091802                   Inf
+  0.000000000000000000,  0.002001000667167067,  0.020100671707002884 \
+  0.050635615968579753,  0.102586588775101073,  0.210721031315652618 \
+  13.815510557964271854, 9.210340371976181828,  7.377758908227870727 \
+  5.991464547107979932,  4.605170185988091802,                   Inf
 cdf.values = \
-  0, 0.001, 0.01, 0.025, 0.05, 0.1, 0.999, 0.990, 0.975, 0.950, 0.900, 1
+  0.0000000000000000000000 0.0010000000000000000208 0.0100000000000000002082 \
+  0.0250000000000000013878 0.0500000000000000027756 0.1000000000000000055511 \
+  0.9989999999999999991118 0.9899999999999999911182 0.9749999999999999777955 \
+  0.9499999999999999555911 0.9000000000000000222045 1.0000000000000000000000
 pdf.values = \
   0.5 0.49949999999999999956 0.49499999999999999556 \
   0.48749999999999998890 0.47499999999999997780 0.45000000000000001110 \
   0.00050000000000000055 0.00500000000000000184 0.01250000000000001110 \
   0.02500000000000002567 0.04999999999999998890 0.00000000000000000000
+sf.values = \
+  1.000000000000000000000 0.998999999999999999112 0.989999999999999991118 \
+  0.975000000000000088818 0.950000000000000066613 0.900000000000000022204 \
+  0.001000000000000001105 0.010000000000000003678 0.025000000000000022204 \
+  0.050000000000000051348 0.099999999999999977796 0.000000000000000000000
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.chisquared.4.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.chisquared.4.properties
index 81fb55c..a5e5d44 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.chisquared.4.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.chisquared.4.properties
@@ -14,22 +14,27 @@
 # limitations under the License.
 
 parameters = 1.0
-# TODO: Limited by the CDF inverse mapping.
-tolerance.relative = 5e-7
-tolerance.absolute = 2e-10
 mean = 1.0
 variance = 2.0
 lower = 0
 # Computed with R version 1.8.1 (linux version)
 cdf.points = \
-  0.0000000000000000e+00 1.5707971492624904e-06 1.5708785790970206e-04 \
-  9.8206911717525617e-04 3.9321400000195249e-03 1.5790774093431229e-02 \
-  1.0827566170662729e+01 6.6348966010212127e+00 5.0238861873148846e+00 \
-  3.8414588206941240e+00 2.7055434540954155e+00                    Inf
+  0.0000000000000000e+00, 1.5707971492624904e-06, 1.5708785790970206e-04 \
+  9.8206911717525617e-04, 3.9321400000195249e-03, 1.5790774093431229e-02 \
+  1.0827566170662729e+01, 6.6348966010212127e+00, 5.0238861873148846e+00 \
+  3.8414588206941240e+00, 2.7055434540954155e+00,                    Inf
 cdf.values = \
-  0, 0.001, 0.01, 0.025, 0.05, 0.1, 0.999, 0.990, 0.975, 0.950, 0.900, 1
+  0.0000000000000000000000 0.0010000000000000000208 0.0100000000000000002082 \
+  0.0250000000000000013878 0.0500000000000000027756 0.1000000000000000194289 \
+  0.9989999999999999991118 0.9899999999999999911182 0.9749999999999999777955 \
+  0.9500000000000000666134 0.8999999999999999111822 1.0000000000000000000000
 pdf.values = \
                      Inf 3.1830955285046593e+02 3.1827655293772658e+01 \
   1.2724062250397644e+01 6.3495321486567917e+00 3.1497742813794667e+00 \
   5.4009296746280165e-04 5.6136262628098937e-03 1.4436673856220024e-02 \
   2.9819461105429837e-02 6.2702017179802227e-02 0.0000000000000000e+00
+sf.values = \
+  1.0000000000000000000000 0.9989999999999999991118 0.9899999999999999911182 \
+  0.9750000000000000888178 0.9499999999999999555911 0.9000000000000000222045 \
+  0.0010000000000000017555 0.0100000000000000227596 0.0250000000000000222045 \
+  0.0499999999999999819589 0.1000000000000001026956 0.0000000000000000000000
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.f.1.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.f.1.properties
index b942156..7a93d9c 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.f.1.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.f.1.properties
@@ -14,8 +14,6 @@
 # limitations under the License.
 
 parameters = 5.0 6.0
-# Limited by CDF inverse mapping
-tolerance.relative = 1e-7
 # Computed using R 2.9.2
 mean = 1.5
 variance = 4.05
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.f.2.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.f.2.properties
index d32a86f..2aaaff9 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.f.2.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.f.2.properties
@@ -14,8 +14,6 @@
 # limitations under the License.
 
 parameters = 1.0 2.0
-# Limited by the CDF inverse mapping.
-tolerance.relative = 1e-9
 # Computed using scipy.stats f
 mean = NaN
 variance = NaN
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.f.3.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.f.3.properties
index 80aaa3e..1f7fa43 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.f.3.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.f.3.properties
@@ -14,8 +14,6 @@
 # limitations under the License.
 
 parameters = 2.0 1.0
-# Limited by CDF inverse mapping
-tolerance.relative = 1e-8
 # Computed using scipy.stats f
 mean = NaN
 variance = NaN
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.f.4.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.f.4.properties
index 2552811..9b66af5 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.f.4.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.f.4.properties
@@ -14,8 +14,6 @@
 # limitations under the License.
 
 parameters = 5.0 2.0
-# Limited by CDF inverse mapping
-tolerance.relative = 1e-7
 # Computed using scipy.stats f
 mean = NaN
 variance = NaN
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.f.5.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.f.5.properties
index 7791cad..3c4125c 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.f.5.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.f.5.properties
@@ -14,8 +14,6 @@
 # limitations under the License.
 
 parameters = 10.0 1.0
-# Limited by CDF inverse mapping
-tolerance.relative = 1e-7
 # Computed using scipy.stats f
 mean = NaN
 variance = NaN
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.f.6.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.f.6.properties
index e06f368..ed0ee31 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.f.6.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.f.6.properties
@@ -14,8 +14,8 @@
 # limitations under the License.
 
 parameters = 100.0 100.0
-# Limited by inverse sf mapping
-tolerance.relative = 5e-9
+# Limited by logpdf values
+tolerance.relative = 6e-13
 # Computed using scipy.stats f
 mean = 1.0204081632653061
 variance = 0.04295085381091212
@@ -72,5 +72,3 @@ sf.values = \
   1.3286199631860416e-11, 2.0324013825740018e-12,\
   3.2917389024730059e-13, 5.6335109943945702e-14,\
   1.0165268915392895e-14
-# TODO: CDF inverse test fails for x=0.01
-disable.cdf.inverse = true
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.gamma.1.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.gamma.1.properties
index 46c8707..1ef2a72 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.gamma.1.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.gamma.1.properties
@@ -14,8 +14,6 @@
 # limitations under the License.
 
 parameters = 4.0 2.0
-# Limited by the CDF inverse mapping.
-tolerance.relative = 5e-11
 # Computed using R 2.9.2 gamma(4, 0.5) using rate = 1/scale
 mean = 8
 variance = 16
@@ -35,6 +33,13 @@ pdf.values = \
   0.00039446885281587437504 0.00366559696760836075530 \
   0.00874649473311463546144 0.01667125081284889440147 \
   0.03117982279541961151970, 0.0
+sf.values = \
+  1.00000000000000000000000 0.99899999999999933297801 \
+  0.99000000000001575628517 0.97500000000009612310947 \
+  0.94999999999998163691117 0.89999999999998636646126 \
+  0.00099999999999058871228 0.00999999999986522260242 \
+  0.02499999999986575460742 0.04999999999942410233711 \
+  0.10000000000036562974870 0.00000000000000000000000
 # Computed using WolframAlpha
 cdf.hp.points = 1e-4, 9e-5
 cdf.hp.values = 2.6040625021701086e-19, 1.7085322417782863e-19
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.nakagami.1.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.nakagami.1.properties
index 0b020d4..7cfb3a6 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.nakagami.1.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.nakagami.1.properties
@@ -28,11 +28,28 @@ cdf.values = \
   6.82689492137085852e-01, 7.69860659556583560e-01,\
   8.38486681532458089e-01, 8.90401416600884343e-01,\
   9.28139361774148575e-01, 9.54499736103641472e-01
+# pdf adjusted to return 0 for x=0.
+# scioy and matlab compute a value.
+# WolframAlpha returns zero.
 pdf.values = \
   0.0,                 0.79788416186068489, 0.78208538795091187,\
   0.73654028060664678, 0.66644920578359934, 0.57938310552296557,\
   0.48394144903828679, 0.38837210996642596, 0.29945493127148981,\
   0.22184166935891111, 0.15790031660178833, 0.10798193302637614,
+logpdf.values = \
+  -inf,                    -0.22579185264472717565,\
+  -0.24579135264472729006, -0.30579135264472723232,\
+  -0.40579135264472732114, -0.54579135264472722344,\
+  -0.72579135264472727229, -0.94579135264472724565,\
+  -1.20579135264472703248, -1.50579135264472752098,\
+  -1.84579135264472737887, -2.22579135264472727229
+sf.values = \
+  1.                    ,  0.99920211557217786247,\
+  0.84148058112179402457,  0.68915651677935163555,\
+  0.54850623550014709906,  0.42371079716679338478,\
+  0.31731050786291403742,  0.23013934044341644025,\
+  0.16151331846754191091,  0.10959858339911565661,\
+  0.07186063822585142535,  0.04550026389635852819
 # Computed using WolframAlpha
 cdf.hp.points = 1e-16, 4e-17
 cdf.hp.values = 7.978845608028653e-17, 3.1915382432114614e-17
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.nakagami.2.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.nakagami.2.properties
index 741643a..eacb7ab 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.nakagami.2.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.nakagami.2.properties
@@ -21,18 +21,20 @@ lower = 0
 upper = Infinity
 cdf.points = 0, 1e-3, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8, 2
 cdf.values = \
-  0.0,               4.886022920318481e-10,\
-  0.003839209349952, 0.029112642643164,\
-  0.089980307387723, 0.189070530913232,\
-  0.317729669663787, 0.460129965238200,\
-  0.599031192110653, 0.720732382881390,\
-  0.817659600745483, 0.888389774905287,
+  0 4.88602292031848e-10  0.00383920934995174 0.0291126426431637 \
+  0.0899803073877229  0.189070530913232 0.317729669663787 \
+  0.460129965238200 0.599031192110653 0.720732382881390 \
+  0.817659600745483 0.888389774905288
+# pdf adjusted to return 0 for x=0.
+# scioy and matlab compute a value.
+# WolframAlpha returns zero.
 pdf.values = \
-  0.0,               0.000001465806436,\
-  0.056899455042812, 0.208008745554258,\
-  0.402828269545621, 0.580491109555755,\
-  0.692398452624549, 0.716805620039994,\
-  0.660571957322857, 0.550137830087772,\
-  0.418105970486118, 0.291913039977849,
-
-disable.cdf.inverse = true
+  0 1.46580643635352e-06  0.0568994550428125  0.208008745554258 \
+  0.402828269545621 0.580491109555755 0.692398452624549 \
+  0.716805620039994 0.660571957322858 0.550137830087772 \
+  0.418105970486118 0.291913039977849
+sf.values = \
+  1 0.999999999511398 0.996160790650048 0.970887357356836 \
+  0.910019692612277 0.810929469086768 0.682270330336213 \
+  0.539870034761800 0.400968807889347 0.279267617118610 \
+  0.182340399254517 0.111610225094713
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.nakagami.3.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.nakagami.3.properties
index 30a96ec..21d4db9 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.nakagami.3.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.nakagami.3.properties
@@ -14,8 +14,6 @@
 # limitations under the License.
 
 parameters = 0.3333333333333333333 1.0
-# Required to pass the CDF inverse mapping test
-tolerance.relative = 1e-7
 # Computed using matlab
 mean = 0.729810132407137
 variance = 0.467377170635876
@@ -28,8 +26,25 @@ cdf.values = \
   0.41599060641445568, 0.53633771818837206, 0.63551561797542433,\
   0.71746556659624028, 0.7845448997061909,  0.83861986211366601,\
   0.88141004735798412, 0.91458032800205946, 0.93973541101651015
+# pdf adjusted to return 0 for x=0.
+# scioy and matlab compute a value.
+# WolframAlpha returns zero.
 pdf.values = \
   0.0,                 5.17638635039373352, 0.8734262427029803,\
   0.66605658341650675, 0.54432849968092045, 0.45048535438453824,\
   0.3709044132031733,  0.30141976583757241, 0.24075672187548078,\
   0.18853365020699897, 0.14451001716499515, 0.10829893529327907
+logpdf.values = \
+                     -inf,  1.64410719707018770919,\
+  -0.13533159177915807247, -0.40638065196580652749,\
+  -0.60820235466852801132, -0.79742971215245506134,\
+  -0.99181089592385818232, -1.19925141485517627871,\
+  -1.42396830813092911683, -1.66847877233910368844,\
+  -1.93440645089123131051, -2.22285995611050690712
+sf.values = \
+  1.                    ,  0.99223541853326424622,\
+  0.73533681536286321645,  0.58400939358554437852,\
+  0.46366228181162794098,  0.36448438202457567048,\
+  0.28253443340375983261,  0.21545510029380909867,\
+  0.16138013788633398526,  0.11858995264201588338,\
+  0.08541967199794076038,  0.06026458898348985294
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.t.1.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.t.1.properties
index cb02c2d..dd00c9a 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.t.1.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.t.1.properties
@@ -14,24 +14,33 @@
 # limitations under the License.
 
 parameters = 5.0
+# Limited by SF
+tolerance.relative = 2e-15
 # Computed using R version 2.9.2
 mean = 0.0
 variance = 1.666666666666667
-# Limited by CDF inverse mapping test
-tolerance.absolute = 1e-8
 cdf.points = \
-                 -Inf -5.8934295313560101 -3.3649299989072183 \
-  -2.5705818356363150 -2.0150483733330233 -1.4758840488244802 \
-   5.8934295313560083  3.3649299989072174  2.5705818356363137 \
-   2.0150483733330224  1.4758840488244804                 Inf
+                 -Inf, -5.8934295313560101, -3.3649299989072183, \
+  -2.5705818356363150, -2.0150483733330233, -1.4758840488244802, \
+   5.8934295313560083,  3.3649299989072174,  2.5705818356363137, \
+   2.0150483733330224,  1.4758840488244804,                 Inf
 cdf.values = \
-  0.0, 0.001, 0.01, 0.025, 0.05, 0.1, 0.999,\
-  0.990, 0.975, 0.950, 0.900, 1.0
+  0.00000000000000000000000 0.00099999999999999915345 \
+  0.01000000000000000194289 0.02499999999999999097944 \
+  0.05000000000000000971445 0.10000000000000000555112 \
+  0.99899999999999999911182 0.98999999999999999111822 \
+  0.97499999999999997779554 0.94999999999999995559108 \
+  0.90000000000000002220446 1.00000000000000000000000
 pdf.values = \
   0.00000000000000000000 0.00075649456551990285 0.01091097529195102916 \
   0.03033778780070596481 0.06379679889497483214 0.12828949200431755129 \
   0.00075649456551990513 0.01091097529195104131 0.03033778780070600645 \
   0.06379679889497488765 0.12828949200431755129 0.00000000000000000000
+sf.values = \
+  1.0000000000000000000000 0.9989999999999999991118 0.9899999999999999911182 \
+  0.9750000000000000888178 0.9499999999999999555911 0.9000000000000000222045 \
+  0.0010000000000000000208 0.0100000000000000140860 0.0250000000000000395517 \
+  0.0500000000000000652256 0.0999999999999999500400 0.0000000000000000000000
 # Computed using WolframAlpha
 cdf.hp.points = -4200, -6400
 cdf.hp.values = 7.261513520181652e-18, 8.838404680725267e-19
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.t.3.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.t.3.properties
index 33bc48e..3598897 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.t.3.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.t.3.properties
@@ -14,8 +14,6 @@
 # limitations under the License.
 
 parameters = 2.0
-# Limited by sf inverse mapping
-tolerance.relative = 5e-11
 # Computed using scipy stats
 mean = 0
 variance = Infinity
@@ -30,6 +28,6 @@ pdf.values = \
   0.19245008972987523,  0.06804138174397717,  0.02741012223434215,\
   0.0130945700219731 ,  0.00712778110110649
 sf.values = \
-0.90824829046386302,  0.78867513459481287,  0.5                ,\
+  0.90824829046386302,  0.78867513459481287,  0.5                ,\
   0.21132486540518713,  0.09175170953613696,  0.04773298313335456,\
   0.02859547920896831,  0.01887477567531186
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.t.4.properties b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.t.4.properties
index a44fda5..b120527 100644
--- a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.t.4.properties
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/test.t.4.properties
@@ -15,22 +15,37 @@
 
 # Special case for large degrees of freedom is the standard normal distribution
 parameters = Infinity
+# Limited by inverse mapping test
+tolerance.relative = 2e-15
 mean = 0
 variance = 1
-# normal(0, 1) computed using R
+# normcdf/normpdf/normpdf('upper') computed using matlab
 cdf.points = \
   -2, -1, 0, 1, 2, 3, 4, 5
 cdf.values = \
-  0.022750131948179212055 0.158655253931457046468 0.500000000000000000000 \
-  0.841344746068542925777 0.977249868051820791415 0.998650101968369896532 \
-  0.999968328758166880021 0.999999713348428076465
+  0.022750131948179219 \
+  0.15865525393145707 \
+  0.5 \
+  0.84134474606854293 \
+  0.97724986805182079 \
+  0.9986501019683699 \
+  0.99996832875816688 \
+  0.99999971334842808
 pdf.values = \
-  5.3990966513188062836e-02 2.4197072451914336533e-01 \
-  3.9894228040143270286e-01 2.4197072451914336533e-01 \
-  5.3990966513188062836e-02 4.4318484119380075273e-03 \
-  1.3383022576488536764e-04 1.4867195147342976779e-06
-sf.values =  \
-  9.7724986805182079141e-01 8.4134474606854292578e-01 \
-  5.0000000000000000000e-01 1.5865525393145704647e-01 \
-  2.2750131948179212055e-02 1.3498980316300945772e-03 \
-  3.1671241833119924327e-05 2.8665157187919391185e-07
+  0.053990966513188063 \
+  0.24197072451914337 \
+  0.3989422804014327 \
+  0.24197072451914337 \
+  0.053990966513188063 \
+  0.0044318484119380075 \
+  0.00013383022576488537 \
+  1.4867195147342979e-06
+sf.values = \
+  0.97724986805182079 \
+  0.84134474606854293 \
+  0.5 \
+  0.15865525393145707 \
+  0.022750131948179219 \
+  0.0013498980316300957 \
+  3.1671241833119965e-05 \
+  2.866515718791946e-07