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

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


The following commit(s) were added to refs/heads/master by this push:
     new 9ee1a60a STATISTICS-96: Validate distribution parameters
9ee1a60a is described below

commit 9ee1a60ab16176c75876ba671b7bcd1de96431a9
Author: Alex Herbert <[email protected]>
AuthorDate: Thu Aug 27 10:20:04 2026 +0100

    STATISTICS-96: Validate distribution parameters
    
    Add checks for NaN values that invalidate the distribution.
---
 .../commons/statistics/distribution/BetaDistribution.java  |  9 ++++++---
 .../statistics/distribution/CauchyDistribution.java        |  9 +++++++--
 .../statistics/distribution/DistributionException.java     |  2 ++
 .../statistics/distribution/ExponentialDistribution.java   |  5 +++--
 .../commons/statistics/distribution/FDistribution.java     |  8 +++++---
 .../statistics/distribution/FoldedNormalDistribution.java  |  6 +++++-
 .../commons/statistics/distribution/GammaDistribution.java |  9 ++++++---
 .../statistics/distribution/GeometricDistribution.java     |  6 ++++--
 .../statistics/distribution/GumbelDistribution.java        |  9 +++++++--
 .../statistics/distribution/LaplaceDistribution.java       |  9 +++++++--
 .../commons/statistics/distribution/LevyDistribution.java  |  9 +++++++--
 .../statistics/distribution/LogNormalDistribution.java     |  9 +++++++--
 .../statistics/distribution/LogisticDistribution.java      |  9 +++++++--
 .../statistics/distribution/NakagamiDistribution.java      | 10 ++++++----
 .../statistics/distribution/NormalDistribution.java        |  6 +++++-
 .../statistics/distribution/ParetoDistribution.java        |  8 +++++---
 .../statistics/distribution/PascalDistribution.java        |  8 ++++----
 .../statistics/distribution/PoissonDistribution.java       |  5 +++--
 .../commons/statistics/distribution/TDistribution.java     |  5 +++--
 .../statistics/distribution/TrapezoidalDistribution.java   | 14 +++++++++-----
 .../statistics/distribution/TriangularDistribution.java    | 11 +++++++----
 .../distribution/TruncatedNormalDistribution.java          | 14 +++++++++-----
 .../statistics/distribution/WeibullDistribution.java       |  9 ++++++---
 .../commons/statistics/distribution/ZipfDistribution.java  |  7 ++++---
 .../statistics/distribution/BetaDistributionTest.java      |  4 +++-
 .../statistics/distribution/CauchyDistributionTest.java    |  4 +++-
 .../distribution/ChiSquaredDistributionTest.java           |  3 ++-
 .../distribution/ExponentialDistributionTest.java          |  3 ++-
 .../commons/statistics/distribution/FDistributionTest.java |  2 ++
 .../distribution/FoldedNormalDistributionTest.java         |  4 +++-
 .../statistics/distribution/GammaDistributionTest.java     |  2 ++
 .../statistics/distribution/GeometricDistributionTest.java |  1 +
 .../statistics/distribution/GumbelDistributionTest.java    |  4 +++-
 .../statistics/distribution/LaplaceDistributionTest.java   |  4 +++-
 .../statistics/distribution/LevyDistributionTest.java      |  4 +++-
 .../statistics/distribution/LogNormalDistributionTest.java |  4 +++-
 .../statistics/distribution/LogisticDistributionTest.java  |  4 +++-
 .../statistics/distribution/NakagamiDistributionTest.java  |  4 +++-
 .../statistics/distribution/NormalDistributionTest.java    |  4 +++-
 .../statistics/distribution/ParetoDistributionTest.java    |  2 ++
 .../statistics/distribution/PascalDistributionTest.java    |  1 +
 .../statistics/distribution/PoissonDistributionTest.java   |  1 +
 .../commons/statistics/distribution/TDistributionTest.java |  3 ++-
 .../distribution/TrapezoidalDistributionTest.java          |  4 ++++
 .../distribution/TriangularDistributionTest.java           |  3 +++
 .../distribution/TruncatedNormalDistributionTest.java      |  9 +++++++++
 .../statistics/distribution/WeibullDistributionTest.java   |  2 ++
 .../statistics/distribution/ZipfDistributionTest.java      |  1 +
 src/changes/changes.xml                                    |  4 ++++
 src/conf/pmd/pmd-ruleset.xml                               |  2 +-
 50 files changed, 203 insertions(+), 76 deletions(-)

diff --git 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/BetaDistribution.java
 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/BetaDistribution.java
index 95b27969..d6b39f04 100644
--- 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/BetaDistribution.java
+++ 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/BetaDistribution.java
@@ -73,14 +73,17 @@ public final class BetaDistribution extends 
AbstractContinuousDistribution {
      * @param alpha First shape parameter (must be positive).
      * @param beta Second shape parameter (must be positive).
      * @return the distribution
-     * @throws IllegalArgumentException if {@code alpha <= 0} or {@code beta 
<= 0}.
+     * @throws IllegalArgumentException if {@code alpha <= 0} or {@code beta 
<= 0};
+     * or a parameter is {@code NaN}.
      */
     public static BetaDistribution of(double alpha,
                                       double beta) {
-        if (alpha <= 0) {
+        if (!(alpha > 0)) {
+            // zero, negative or nan
             throw new 
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, alpha);
         }
-        if (beta <= 0) {
+        if (!(beta > 0)) {
+            // zero, negative or nan
             throw new 
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, beta);
         }
         return new BetaDistribution(alpha, beta);
diff --git 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/CauchyDistribution.java
 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/CauchyDistribution.java
index 00bebadb..b412db41 100644
--- 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/CauchyDistribution.java
+++ 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/CauchyDistribution.java
@@ -61,13 +61,18 @@ public final class CauchyDistribution extends 
AbstractContinuousDistribution {
      * @param location Location parameter.
      * @param scale Scale parameter.
      * @return the distribution
-     * @throws IllegalArgumentException if {@code scale <= 0}.
+     * @throws IllegalArgumentException if {@code scale <= 0} or is {@code 
NaN};
+     * or {@code location} is NaN.
      */
     public static CauchyDistribution of(double location,
                                         double scale) {
-        if (scale <= 0) {
+        if (!(scale > 0)) {
+            // zero, negative or nan
             throw new 
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, scale);
         }
+        if (Double.isNaN(location)) {
+            throw new DistributionException(DistributionException.NAN, 
"Location");
+        }
         return new CauchyDistribution(location, scale);
     }
 
diff --git 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/DistributionException.java
 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/DistributionException.java
index 143ab187..430f77ba 100644
--- 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/DistributionException.java
+++ 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/DistributionException.java
@@ -42,6 +42,8 @@ class DistributionException extends IllegalArgumentException {
     static final String NOT_STRICTLY_POSITIVE = "Number %s is not greater than 
0";
     /** Error message for "not strictly positive finite" condition when {@code 
x <= 0 || x == inf}. */
     static final String NOT_STRICTLY_POSITIVE_FINITE = "Number %s is not 
greater than 0 and finite";
+    /** Error message for a NaN parameter, formatted with the parameter name. 
*/
+    static final String NAN = "%s is NaN";
 
     /** Serializable version identifier. */
     private static final long serialVersionUID = 20180119L;
diff --git 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ExponentialDistribution.java
 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ExponentialDistribution.java
index 924dedf8..0969ba87 100644
--- 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ExponentialDistribution.java
+++ 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ExponentialDistribution.java
@@ -59,10 +59,11 @@ public final class ExponentialDistribution extends 
AbstractContinuousDistributio
      *
      * @param mean Mean of this distribution. This is a scale parameter.
      * @return the distribution
-     * @throws IllegalArgumentException if {@code mean <= 0}.
+     * @throws IllegalArgumentException if {@code mean <= 0} or is {@code NaN}.
      */
     public static ExponentialDistribution of(double mean) {
-        if (mean <= 0) {
+        if (!(mean > 0)) {
+            // zero, negative or nan
             throw new 
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, mean);
         }
         return new ExponentialDistribution(mean);
diff --git 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/FDistribution.java
 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/FDistribution.java
index fb78a961..ff33e658 100644
--- 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/FDistribution.java
+++ 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/FDistribution.java
@@ -95,15 +95,17 @@ public final class FDistribution extends 
AbstractContinuousDistribution {
      * @param denominatorDegreesOfFreedom Denominator degrees of freedom.
      * @return the distribution
      * @throws IllegalArgumentException if {@code numeratorDegreesOfFreedom <= 
0} or
-     * {@code denominatorDegreesOfFreedom <= 0}.
+     * {@code denominatorDegreesOfFreedom <= 0}; or a parameter is {@code NaN}.
      */
     public static FDistribution of(double numeratorDegreesOfFreedom,
                                    double denominatorDegreesOfFreedom) {
-        if (numeratorDegreesOfFreedom <= 0) {
+        if (!(numeratorDegreesOfFreedom > 0)) {
+            // zero, negative or nan
             throw new 
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE,
                                             numeratorDegreesOfFreedom);
         }
-        if (denominatorDegreesOfFreedom <= 0) {
+        if (!(denominatorDegreesOfFreedom > 0)) {
+            // zero, negative or nan
             throw new 
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE,
                                             denominatorDegreesOfFreedom);
         }
diff --git 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/FoldedNormalDistribution.java
 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/FoldedNormalDistribution.java
index a8f11026..16ae2b44 100644
--- 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/FoldedNormalDistribution.java
+++ 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/FoldedNormalDistribution.java
@@ -285,11 +285,15 @@ public abstract class FoldedNormalDistribution extends 
AbstractContinuousDistrib
      * @param mu Location parameter.
      * @param sigma Scale parameter.
      * @return the distribution
-     * @throws IllegalArgumentException if {@code sigma <= 0}.
+     * @throws IllegalArgumentException if {@code sigma <= 0} or is {@code 
NaN};
+     * or {@code mu} is {@code NaN}.
      */
     public static FoldedNormalDistribution of(double mu,
                                               double sigma) {
         if (sigma > 0) {
+            if (Double.isNaN(mu)) {
+                throw new DistributionException(DistributionException.NAN, 
"Mu");
+            }
             if (mu == 0) {
                 return new HalfNormalDistribution(sigma);
             }
diff --git 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GammaDistribution.java
 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GammaDistribution.java
index bcc7ae4d..9c645ed1 100644
--- 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GammaDistribution.java
+++ 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GammaDistribution.java
@@ -70,14 +70,17 @@ public final class GammaDistribution extends 
AbstractContinuousDistribution {
      * @param shape Shape parameter.
      * @param scale Scale parameter.
      * @return the distribution
-     * @throws IllegalArgumentException if {@code shape <= 0} or {@code scale 
<= 0}.
+     * @throws IllegalArgumentException if {@code shape <= 0} or {@code scale 
<= 0};
+     * or a parameter is {@code NaN}.
      */
     public static GammaDistribution of(double shape,
                                        double scale) {
-        if (shape <= 0) {
+        if (!(shape > 0)) {
+            // zero, negative or nan
             throw new 
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, shape);
         }
-        if (scale <= 0) {
+        if (!(scale > 0)) {
+            // zero, negative or nan
             throw new 
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, scale);
         }
         return new GammaDistribution(shape, scale);
diff --git 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GeometricDistribution.java
 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GeometricDistribution.java
index 46bb3eb4..487f9110 100644
--- 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GeometricDistribution.java
+++ 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GeometricDistribution.java
@@ -79,10 +79,12 @@ public final class GeometricDistribution extends 
AbstractDiscreteDistribution {
      *
      * @param p Probability of success.
      * @return the geometric distribution
-     * @throws IllegalArgumentException if {@code p <= 0} or {@code p > 1}.
+     * @throws IllegalArgumentException if {@code p <= 0} or {@code p > 1};
+     * or {@code p} is {@code NaN}.
      */
     public static GeometricDistribution of(double p) {
-        if (p <= 0 || p > 1) {
+        if (!(p > 0 && p <= 1)) {
+            // out of range (0, 1] or nan
             throw new 
DistributionException(DistributionException.INVALID_NON_ZERO_PROBABILITY, p);
         }
         return new GeometricDistribution(p);
diff --git 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GumbelDistribution.java
 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GumbelDistribution.java
index 6c54da4a..db0c78b2 100644
--- 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GumbelDistribution.java
+++ 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GumbelDistribution.java
@@ -68,13 +68,18 @@ public final class GumbelDistribution extends 
AbstractContinuousDistribution {
      * @param mu Location parameter.
      * @param beta Scale parameter (must be positive).
      * @return the distribution
-     * @throws IllegalArgumentException if {@code beta <= 0}
+     * @throws IllegalArgumentException if {@code beta <= 0} or is {@code NaN};
+     * or {@code mu} is NaN
      */
     public static GumbelDistribution of(double mu,
                                         double beta) {
-        if (beta <= 0) {
+        if (!(beta > 0)) {
+            // zero, negative or nan
             throw new 
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, beta);
         }
+        if (Double.isNaN(mu)) {
+            throw new DistributionException(DistributionException.NAN, 
"Location");
+        }
         return new GumbelDistribution(mu, beta);
     }
 
diff --git 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LaplaceDistribution.java
 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LaplaceDistribution.java
index bfc98c09..04f89851 100644
--- 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LaplaceDistribution.java
+++ 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LaplaceDistribution.java
@@ -55,13 +55,18 @@ public final class LaplaceDistribution extends 
AbstractContinuousDistribution {
      * @param mu Location parameter.
      * @param beta Scale parameter (must be positive).
      * @return the distribution
-     * @throws IllegalArgumentException if {@code beta <= 0}
+     * @throws IllegalArgumentException if {@code beta <= 0} or is {@code NaN};
+     * or {@code mu} is NaN
      */
     public static LaplaceDistribution of(double mu,
                                          double beta) {
-        if (beta <= 0) {
+        if (!(beta > 0)) {
+            // zero, negative or nan
             throw new 
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, beta);
         }
+        if (Double.isNaN(mu)) {
+            throw new DistributionException(DistributionException.NAN, 
"Location");
+        }
         return new LaplaceDistribution(mu, beta);
     }
 
diff --git 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LevyDistribution.java
 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LevyDistribution.java
index 11be800a..309a2bf6 100644
--- 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LevyDistribution.java
+++ 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LevyDistribution.java
@@ -64,14 +64,19 @@ public final class LevyDistribution extends 
AbstractContinuousDistribution {
      * @param mu Location parameter.
      * @param c Scale parameter.
      * @return the distribution
-     * @throws IllegalArgumentException if {@code c <= 0}.
+     * @throws IllegalArgumentException if {@code c <= 0} or is {@code NaN};
+     * or {@code mu} is NaN.
      */
     public static LevyDistribution of(double mu,
                                       double c) {
-        if (c <= 0) {
+        if (!(c > 0)) {
+            // zero, negative or nan
             throw new 
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE,
                                             c);
         }
+        if (Double.isNaN(mu)) {
+            throw new DistributionException(DistributionException.NAN, 
"Location");
+        }
         return new LevyDistribution(mu, c);
     }
 
diff --git 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LogNormalDistribution.java
 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LogNormalDistribution.java
index ca41b4d2..bb4cc4a2 100644
--- 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LogNormalDistribution.java
+++ 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LogNormalDistribution.java
@@ -73,13 +73,18 @@ public final class LogNormalDistribution extends 
AbstractContinuousDistribution
      * @param mu Mean of the natural logarithm of the distribution values.
      * @param sigma Standard deviation of the natural logarithm of the 
distribution values.
      * @return the distribution
-     * @throws IllegalArgumentException if {@code sigma <= 0}.
+     * @throws IllegalArgumentException if {@code sigma <= 0} or is {@code 
NaN};
+     * or {@code mu} is NaN.
      */
     public static LogNormalDistribution of(double mu,
                                            double sigma) {
-        if (sigma <= 0) {
+        if (!(sigma > 0)) {
+            // zero, negative or nan
             throw new 
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, sigma);
         }
+        if (Double.isNaN(mu)) {
+            throw new DistributionException(DistributionException.NAN, "Mu");
+        }
         return new LogNormalDistribution(mu, sigma);
     }
 
diff --git 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LogisticDistribution.java
 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LogisticDistribution.java
index 1cbafbf9..664a111e 100644
--- 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LogisticDistribution.java
+++ 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LogisticDistribution.java
@@ -61,14 +61,19 @@ public final class LogisticDistribution extends 
AbstractContinuousDistribution {
      * @param mu Location parameter.
      * @param scale Scale parameter (must be positive).
      * @return the distribution
-     * @throws IllegalArgumentException if {@code scale <= 0}.
+     * @throws IllegalArgumentException if {@code scale <= 0} or is {@code 
NaN};
+     * or {@code mu} is NaN.
      */
     public static LogisticDistribution of(double mu,
                                           double scale) {
-        if (scale <= 0) {
+        if (!(scale > 0)) {
+            // zero, negative or nan
             throw new 
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE,
                                             scale);
         }
+        if (Double.isNaN(mu)) {
+            throw new DistributionException(DistributionException.NAN, 
"Location");
+        }
         return new LogisticDistribution(mu, scale);
     }
 
diff --git 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NakagamiDistribution.java
 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NakagamiDistribution.java
index 08a2af5e..7de38cd1 100644
--- 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NakagamiDistribution.java
+++ 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NakagamiDistribution.java
@@ -77,15 +77,17 @@ public final class NakagamiDistribution extends 
AbstractContinuousDistribution {
      * @param mu Shape parameter (must be positive).
      * @param omega Scale parameter (must be positive). Controls the spread of 
the distribution.
      * @return the distribution
-     * @throws IllegalArgumentException  if {@code mu <= 0} or if
-     * {@code omega <= 0}.
+     * @throws IllegalArgumentException if {@code mu <= 0} or if
+     * {@code omega <= 0}; or a parameter is {@code NaN}.
      */
     public static NakagamiDistribution of(double mu,
                                           double omega) {
-        if (mu <= 0) {
+        if (!(mu > 0)) {
+            // zero, negative or nan
             throw new 
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, mu);
         }
-        if (omega <= 0) {
+        if (!(omega > 0)) {
+            // zero, negative or nan
             throw new 
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, omega);
         }
         return new NakagamiDistribution(mu, omega);
diff --git 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NormalDistribution.java
 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NormalDistribution.java
index 9deccee9..ee96323a 100644
--- 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NormalDistribution.java
+++ 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NormalDistribution.java
@@ -84,11 +84,15 @@ public final class NormalDistribution extends 
AbstractContinuousDistribution {
      * @param mean Mean for this distribution.
      * @param sd Standard deviation for this distribution.
      * @return the distribution
-     * @throws IllegalArgumentException if {@code sd <= 0}.
+     * @throws IllegalArgumentException if {@code sd <= 0} or is {@code NaN};
+     * or {@code mean} is NaN.
      */
     public static NormalDistribution of(double mean,
                                         double sd) {
         if (sd > 0) {
+            if (Double.isNaN(mean)) {
+                throw new DistributionException(DistributionException.NAN, 
"Mean");
+            }
             return new NormalDistribution(mean, sd);
         }
         // zero, negative or nan
diff --git 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ParetoDistribution.java
 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ParetoDistribution.java
index a61bf9fb..227eac00 100644
--- 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ParetoDistribution.java
+++ 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ParetoDistribution.java
@@ -96,14 +96,16 @@ public final class ParetoDistribution extends 
AbstractContinuousDistribution {
      * @param shape Shape parameter (Pareto index).
      * @return the distribution
      * @throws IllegalArgumentException if {@code scale <= 0}, {@code scale} is
-     * infinite, or {@code shape <= 0}.
+     * infinite, or {@code shape <= 0}; or a parameter is {@code NaN}.
      */
     public static ParetoDistribution of(double scale,
                                         double shape) {
-        if (scale <= 0 || scale == Double.POSITIVE_INFINITY) {
+        if (!(scale > 0 && scale < Double.POSITIVE_INFINITY)) {
+            // zero, negative, infinite or nan
             throw new 
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE_FINITE, 
scale);
         }
-        if (shape <= 0) {
+        if (!(shape > 0)) {
+            // zero, negative or nan
             throw new 
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, shape);
         }
         return new ParetoDistribution(scale, shape);
diff --git 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/PascalDistribution.java
 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/PascalDistribution.java
index 1dffce21..073ad3b9 100644
--- 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/PascalDistribution.java
+++ 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/PascalDistribution.java
@@ -89,16 +89,16 @@ public final class PascalDistribution extends 
AbstractDiscreteDistribution {
      * @param r Number of successes.
      * @param p Probability of success.
      * @return the distribution
-     * @throws IllegalArgumentException if {@code r <= 0} or {@code p <= 0} or
-     * {@code p > 1}.
+     * @throws IllegalArgumentException if {@code r <= 0}; or {@code p <= 0},
+     * {@code p > 1} or {@code p} is {@code NaN}.
      */
     public static PascalDistribution of(int r,
                                         double p) {
         if (r <= 0) {
             throw new 
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, r);
         }
-        if (p <= 0 ||
-            p > 1) {
+        if (!(p > 0 && p <= 1)) {
+            // out of range (0, 1] or nan
             throw new 
DistributionException(DistributionException.INVALID_NON_ZERO_PROBABILITY, p);
         }
         return new PascalDistribution(r, p);
diff --git 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/PoissonDistribution.java
 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/PoissonDistribution.java
index fb09600d..5bf07648 100644
--- 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/PoissonDistribution.java
+++ 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/PoissonDistribution.java
@@ -55,10 +55,11 @@ public final class PoissonDistribution extends 
AbstractDiscreteDistribution {
      *
      * @param mean Poisson mean.
      * @return the distribution
-     * @throws IllegalArgumentException if {@code mean <= 0}.
+     * @throws IllegalArgumentException if {@code mean <= 0} or is {@code NaN}.
      */
     public static PoissonDistribution of(double mean) {
-        if (mean <= 0) {
+        if (!(mean > 0)) {
+            // zero, negative or nan
             throw new 
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, mean);
         }
         return new PoissonDistribution(mean);
diff --git 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TDistribution.java
 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TDistribution.java
index 109de5b3..806de6f0 100644
--- 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TDistribution.java
+++ 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TDistribution.java
@@ -237,10 +237,11 @@ public abstract class TDistribution extends 
AbstractContinuousDistribution {
      *
      * @param degreesOfFreedom Degrees of freedom.
      * @return the distribution
-     * @throws IllegalArgumentException if {@code degreesOfFreedom <= 0}
+     * @throws IllegalArgumentException if {@code degreesOfFreedom <= 0} or is 
{@code NaN}.
      */
     public static TDistribution of(double degreesOfFreedom) {
-        if (degreesOfFreedom <= 0) {
+        if (!(degreesOfFreedom > 0)) {
+            // zero, negative or nan
             throw new 
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE,
                                             degreesOfFreedom);
         }
diff --git 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TrapezoidalDistribution.java
 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TrapezoidalDistribution.java
index b8a02989..400c3235 100644
--- 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TrapezoidalDistribution.java
+++ 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TrapezoidalDistribution.java
@@ -373,22 +373,26 @@ public abstract class TrapezoidalDistribution extends 
AbstractContinuousDistribu
      * @param d Upper limit of this distribution (inclusive).
      * @return the distribution
      * @throws IllegalArgumentException if {@code a >= d}, if {@code b < a}, if
-     * {@code c < b} or if {@code c > d}.
+     * {@code c < b} or if {@code c > d}; or a parameter is {@code NaN}.
      */
     public static TrapezoidalDistribution of(double a, double b, double c, 
double d) {
-        if (a >= d) {
+        if (!(a < d)) {
+            // a >= d or nan
             throw new 
DistributionException(DistributionException.INVALID_RANGE_LOW_GTE_HIGH,
                                             a, d);
         }
-        if (b < a) {
+        if (!(b >= a)) {
+            // b < a or nan
             throw new DistributionException(DistributionException.TOO_SMALL,
                                             b, a);
         }
-        if (c < b) {
+        if (!(c >= b)) {
+            // c < b or nan
             throw new DistributionException(DistributionException.TOO_SMALL,
                                             c, b);
         }
-        if (c > d) {
+        if (!(c <= d)) {
+            // c > d or nan
             throw new DistributionException(DistributionException.TOO_LARGE,
                                             c, d);
         }
diff --git 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TriangularDistribution.java
 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TriangularDistribution.java
index 77386cdb..f0ef0d6b 100644
--- 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TriangularDistribution.java
+++ 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TriangularDistribution.java
@@ -75,20 +75,23 @@ public final class TriangularDistribution extends 
AbstractContinuousDistribution
      * @param b Upper limit of this distribution (inclusive).
      * @return the distribution
      * @throws IllegalArgumentException if {@code a >= b}, if {@code c > b} or 
if
-     * {@code c < a}.
+     * {@code c < a}; or a parameter is {@code NaN}.
      */
     public static TriangularDistribution of(double a,
                                             double c,
                                             double b) {
-        if (a >= b) {
+        if (!(a < b)) {
+            // a >= b or nan
             throw new 
DistributionException(DistributionException.INVALID_RANGE_LOW_GTE_HIGH,
                                             a, b);
         }
-        if (c < a) {
+        if (!(c >= a)) {
+            // c < a or nan
             throw new DistributionException(DistributionException.TOO_SMALL,
                                             c, a);
         }
-        if (c > b) {
+        if (!(c <= b)) {
+            // c > b or nan
             throw new DistributionException(DistributionException.TOO_LARGE,
                                             c, b);
         }
diff --git 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TruncatedNormalDistribution.java
 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TruncatedNormalDistribution.java
index 492a0724..245ea7ee 100644
--- 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TruncatedNormalDistribution.java
+++ 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TruncatedNormalDistribution.java
@@ -120,14 +120,17 @@ public final class TruncatedNormalDistribution extends 
AbstractContinuousDistrib
      * @param lower Lower bound (inclusive) of the distribution, can be {@link 
Double#NEGATIVE_INFINITY}.
      * @param upper Upper bound (inclusive) of the distribution, can be {@link 
Double#POSITIVE_INFINITY}.
      * @return the distribution
-     * @throws IllegalArgumentException if {@code sd <= 0}; if {@code lower >= 
upper}; or if
-     * the truncation covers no probability range in the parent distribution.
+     * @throws IllegalArgumentException if {@code sd <= 0}; if {@code lower >= 
upper}; if
+     * the truncation covers no probability range in the parent distribution;
+     * or a parameter is {@code NaN}.
      */
     public static TruncatedNormalDistribution of(double mean, double sd, 
double lower, double upper) {
-        if (sd <= 0) {
+        if (!(sd > 0)) {
+            // zero, negative or nan
             throw new 
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, sd);
         }
-        if (lower >= upper) {
+        if (!(lower < upper)) {
+            // lower >= upper, or nan bounds
             throw new 
DistributionException(DistributionException.INVALID_RANGE_LOW_GTE_HIGH, lower, 
upper);
         }
 
@@ -137,7 +140,8 @@ public final class TruncatedNormalDistribution extends 
AbstractContinuousDistrib
 
         // If there is no computable range then raise an exception.
         final double z = parent.probability(lower, upper);
-        if (z <= MIN_P) {
+        if (!(z > MIN_P)) {
+            // z <= MIN_P, or z is nan
             // Map the bounds to a standard normal distribution for the message
             final double a = (lower - mean) / sd;
             final double b = (upper - mean) / sd;
diff --git 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/WeibullDistribution.java
 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/WeibullDistribution.java
index 07b8d068..f5a1dc08 100644
--- 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/WeibullDistribution.java
+++ 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/WeibullDistribution.java
@@ -73,15 +73,18 @@ public final class WeibullDistribution extends 
AbstractContinuousDistribution {
      * @param shape Shape parameter.
      * @param scale Scale parameter.
      * @return the distribution
-     * @throws IllegalArgumentException if {@code shape <= 0} or {@code scale 
<= 0}.
+     * @throws IllegalArgumentException if {@code shape <= 0} or {@code scale 
<= 0};
+     * or a parameter is {@code NaN}.
      */
     public static WeibullDistribution of(double shape,
                                          double scale) {
-        if (shape <= 0) {
+        if (!(shape > 0)) {
+            // zero, negative or nan
             throw new 
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE,
                                             shape);
         }
-        if (scale <= 0) {
+        if (!(scale > 0)) {
+            // zero, negative or nan
             throw new 
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE,
                                             scale);
         }
diff --git 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ZipfDistribution.java
 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ZipfDistribution.java
index 2d670935..0e92d16e 100644
--- 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ZipfDistribution.java
+++ 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ZipfDistribution.java
@@ -64,8 +64,8 @@ public final class ZipfDistribution extends 
AbstractDiscreteDistribution {
      * @param numberOfElements Number of elements.
      * @param exponent Exponent.
      * @return the distribution
-     * @exception IllegalArgumentException if {@code numberOfElements <= 0}
-     * or {@code exponent <= 0}.
+     * @exception IllegalArgumentException if {@code numberOfElements <= 0};
+     * or {@code exponent <= 0} or is {@code NaN}.
      */
     public static ZipfDistribution of(int numberOfElements,
                                       double exponent) {
@@ -73,7 +73,8 @@ public final class ZipfDistribution extends 
AbstractDiscreteDistribution {
             throw new 
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE,
                                             numberOfElements);
         }
-        if (exponent < 0) {
+        if (!(exponent >= 0)) {
+            // negative or nan
             throw new DistributionException(DistributionException.NEGATIVE,
                                             exponent);
         }
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 6046744e..f2b59b32 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
@@ -52,7 +52,9 @@ class BetaDistributionTest extends 
BaseContinuousDistributionTest {
             {0.0, 1.0},
             {-0.1, 1.0},
             {0.5, 0.0},
-            {0.5, -0.1}
+            {0.5, -0.1},
+            {Double.NaN, 1.0},
+            {0.5, Double.NaN}
         };
     }
 
diff --git 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/CauchyDistributionTest.java
 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/CauchyDistributionTest.java
index 12306f9e..f2a894e6 100644
--- 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/CauchyDistributionTest.java
+++ 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/CauchyDistributionTest.java
@@ -33,7 +33,9 @@ class CauchyDistributionTest extends 
BaseContinuousDistributionTest {
     Object[][] makeInvalidParameters() {
         return new Object[][] {
             {0.0, 0.0},
-            {0.0, -0.1}
+            {0.0, -0.1},
+            {Double.NaN, 1.0},
+            {0.0, Double.NaN}
         };
     }
 
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 93da16ef..0a809d99 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
@@ -37,7 +37,8 @@ class ChiSquaredDistributionTest extends 
BaseContinuousDistributionTest {
     Object[][] makeInvalidParameters() {
         return new Object[][] {
             {0.0},
-            {-0.1}
+            {-0.1},
+            {Double.NaN}
         };
     }
 
diff --git 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ExponentialDistributionTest.java
 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ExponentialDistributionTest.java
index aba57195..5f60a19b 100644
--- 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ExponentialDistributionTest.java
+++ 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ExponentialDistributionTest.java
@@ -37,7 +37,8 @@ class ExponentialDistributionTest extends 
BaseContinuousDistributionTest {
     Object[][] makeInvalidParameters() {
         return new Object[][] {
             {0.0},
-            {-0.1}
+            {-0.1},
+            {Double.NaN}
         };
     }
 
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 b8aca866..0bf47b40 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
@@ -42,6 +42,8 @@ class FDistributionTest extends 
BaseContinuousDistributionTest {
             {-0.1, 1.0},
             {1.0, 0.0},
             {1.0, -0.1},
+            {Double.NaN, 1.0},
+            {1.0, Double.NaN},
         };
     }
 
diff --git 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/FoldedNormalDistributionTest.java
 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/FoldedNormalDistributionTest.java
index f1007d16..fd27849d 100644
--- 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/FoldedNormalDistributionTest.java
+++ 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/FoldedNormalDistributionTest.java
@@ -39,7 +39,9 @@ class FoldedNormalDistributionTest extends 
BaseContinuousDistributionTest {
     Object[][] makeInvalidParameters() {
         return new Object[][] {
             {0.0, 0.0},
-            {0.0, -0.1}
+            {0.0, -0.1},
+            {Double.NaN, 1.0},
+            {0.0, Double.NaN}
         };
     }
 
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 3d9b8209..c902bf66 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
@@ -51,6 +51,8 @@ class GammaDistributionTest extends 
BaseContinuousDistributionTest {
             {-0.1, 1.0},
             {1.0, 0.0},
             {1.0, -0.1},
+            {Double.NaN, 1.0},
+            {1.0, Double.NaN},
         };
     }
 
diff --git 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/GeometricDistributionTest.java
 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/GeometricDistributionTest.java
index 3dfde948..fbe960a3 100644
--- 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/GeometricDistributionTest.java
+++ 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/GeometricDistributionTest.java
@@ -42,6 +42,7 @@ class GeometricDistributionTest extends 
BaseDiscreteDistributionTest {
             {-0.1},
             {0.0},
             {1.1},
+            {Double.NaN},
         };
     }
 
diff --git 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/GumbelDistributionTest.java
 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/GumbelDistributionTest.java
index 15758d6d..75474a60 100644
--- 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/GumbelDistributionTest.java
+++ 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/GumbelDistributionTest.java
@@ -32,7 +32,9 @@ class GumbelDistributionTest extends 
BaseContinuousDistributionTest {
     Object[][] makeInvalidParameters() {
         return new Object[][] {
             {10.0, 0.0},
-            {10.0, -0.1}
+            {10.0, -0.1},
+            {Double.NaN, 1.0},
+            {10.0, Double.NaN}
         };
     }
 
diff --git 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LaplaceDistributionTest.java
 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LaplaceDistributionTest.java
index 2585cae3..7dab961f 100644
--- 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LaplaceDistributionTest.java
+++ 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LaplaceDistributionTest.java
@@ -33,7 +33,9 @@ class LaplaceDistributionTest extends 
BaseContinuousDistributionTest {
     Object[][] makeInvalidParameters() {
         return new Object[][] {
             {0.0, 0.0},
-            {0.0, -0.1}
+            {0.0, -0.1},
+            {Double.NaN, 1.0},
+            {0.0, Double.NaN}
         };
     }
 
diff --git 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LevyDistributionTest.java
 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LevyDistributionTest.java
index 8d58292c..f41454ef 100644
--- 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LevyDistributionTest.java
+++ 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LevyDistributionTest.java
@@ -32,7 +32,9 @@ class LevyDistributionTest  extends 
BaseContinuousDistributionTest {
     Object[][] makeInvalidParameters() {
         return new Object[][] {
             {0.0, 0.0},
-            {0.0, -0.1}
+            {0.0, -0.1},
+            {Double.NaN, 1.0},
+            {0.0, Double.NaN}
         };
     }
 
diff --git 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LogNormalDistributionTest.java
 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LogNormalDistributionTest.java
index 72a0ed9e..2d0cdd51 100644
--- 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LogNormalDistributionTest.java
+++ 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LogNormalDistributionTest.java
@@ -36,7 +36,9 @@ class LogNormalDistributionTest extends 
BaseContinuousDistributionTest {
     Object[][] makeInvalidParameters() {
         return new Object[][] {
             {0.0, 0.0},
-            {0.0, -0.1}
+            {0.0, -0.1},
+            {Double.NaN, 1.0},
+            {0.0, Double.NaN}
         };
     }
 
diff --git 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LogisticDistributionTest.java
 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LogisticDistributionTest.java
index dc95475e..0bb6374f 100644
--- 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LogisticDistributionTest.java
+++ 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LogisticDistributionTest.java
@@ -35,7 +35,9 @@ class LogisticDistributionTest extends 
BaseContinuousDistributionTest {
     Object[][] makeInvalidParameters() {
         return new Object[][] {
             {0.0, 0.0},
-            {0.0, -0.1}
+            {0.0, -0.1},
+            {Double.NaN, 1.0},
+            {0.0, Double.NaN}
         };
     }
 
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 9229fefe..83e1133d 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
@@ -40,7 +40,9 @@ class NakagamiDistributionTest extends 
BaseContinuousDistributionTest {
             {0.0, 1.0},
             {-0.1, 1.0},
             {0.5, 0.0},
-            {0.5, -0.1}
+            {0.5, -0.1},
+            {Double.NaN, 1.0},
+            {0.5, Double.NaN}
         };
     }
 
diff --git 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/NormalDistributionTest.java
 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/NormalDistributionTest.java
index 50c25456..96ef56ba 100644
--- 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/NormalDistributionTest.java
+++ 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/NormalDistributionTest.java
@@ -43,7 +43,9 @@ class NormalDistributionTest extends 
BaseContinuousDistributionTest {
     Object[][] makeInvalidParameters() {
         return new Object[][] {
             {0.0, 0.0},
-            {0.0, -0.1}
+            {0.0, -0.1},
+            {Double.NaN, 1.0},
+            {0.0, Double.NaN}
         };
     }
 
diff --git 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ParetoDistributionTest.java
 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ParetoDistributionTest.java
index e07bc100..3da053b0 100644
--- 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ParetoDistributionTest.java
+++ 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ParetoDistributionTest.java
@@ -51,6 +51,8 @@ class ParetoDistributionTest extends 
BaseContinuousDistributionTest {
             {1.0, 0.0},
             {1.0, -0.1},
             {Double.POSITIVE_INFINITY, 1.0},
+            {Double.NaN, 1.0},
+            {1.0, Double.NaN},
         };
     }
 
diff --git 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/PascalDistributionTest.java
 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/PascalDistributionTest.java
index 4b1ad996..4398987c 100644
--- 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/PascalDistributionTest.java
+++ 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/PascalDistributionTest.java
@@ -42,6 +42,7 @@ class PascalDistributionTest extends 
BaseDiscreteDistributionTest {
             {3, -0.1},
             {3, 0.0},
             {3, 1.1},
+            {3, Double.NaN},
         };
     }
 
diff --git 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/PoissonDistributionTest.java
 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/PoissonDistributionTest.java
index 2f6e8597..f38a9d51 100644
--- 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/PoissonDistributionTest.java
+++ 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/PoissonDistributionTest.java
@@ -40,6 +40,7 @@ class PoissonDistributionTest extends 
BaseDiscreteDistributionTest {
         return new Object[][] {
             {0.0},
             {-0.1},
+            {Double.NaN},
         };
     }
 
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 35872409..6b46606a 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
@@ -40,7 +40,8 @@ class TDistributionTest extends 
BaseContinuousDistributionTest {
     Object[][] makeInvalidParameters() {
         return new Object[][] {
             {0.0},
-            {-0.1}
+            {-0.1},
+            {Double.NaN}
         };
     }
 
diff --git 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TrapezoidalDistributionTest.java
 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TrapezoidalDistributionTest.java
index 2607319c..3b301980 100644
--- 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TrapezoidalDistributionTest.java
+++ 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TrapezoidalDistributionTest.java
@@ -57,6 +57,10 @@ class TrapezoidalDistributionTest extends 
BaseContinuousDistributionTest {
             {1.0, 2.0, 3.0, 1.5}, // d < b
             {1.0, 2.0, 1.5, 4.0}, // c < b
             {1.0, 2.0, 3.0, 2.5}, // d < c
+            {Double.NaN, 2.0, 3.0, 4.0}, // a = nan
+            {1.0, Double.NaN, 3.0, 4.0}, // b = nan
+            {1.0, 2.0, Double.NaN, 4.0}, // c = nan
+            {1.0, 2.0, 3.0, Double.NaN}, // d = nan
         };
     }
 
diff --git 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TriangularDistributionTest.java
 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TriangularDistributionTest.java
index eb56b3f1..c37d6339 100644
--- 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TriangularDistributionTest.java
+++ 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TriangularDistributionTest.java
@@ -50,6 +50,9 @@ class TriangularDistributionTest extends 
BaseContinuousDistributionTest {
             {1.0, 4.0, 3.0},
             {1.0, 2.0, -1.0},
             {1.0, 2.0, 1.5},
+            {Double.NaN, 2.0, 3.0},
+            {1.0, Double.NaN, 3.0},
+            {1.0, 2.0, Double.NaN},
         };
     }
 
diff --git 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TruncatedNormalDistributionTest.java
 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TruncatedNormalDistributionTest.java
index 7cb36e04..0de98e5d 100644
--- 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TruncatedNormalDistributionTest.java
+++ 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TruncatedNormalDistributionTest.java
@@ -49,6 +49,15 @@ class TruncatedNormalDistributionTest extends 
BaseContinuousDistributionTest {
             {0.0, 1.0, 1.0, -1.0},
             // No usable probability range
             {0.0, 1.0, 100.0, 101.0},
+            // NaN parameters
+            {Double.NaN, 1.0, -1.0, 1.0},
+            {0.0, Double.NaN, -1.0, 1.0},
+            {0.0, 1.0, Double.NaN, 1.0},
+            {0.0, 1.0, -1.0, Double.NaN},
+            // Infinite parameters
+            {Double.NEGATIVE_INFINITY, 1.0, -1.0, 1.0},
+            {Double.POSITIVE_INFINITY, 1.0, -1.0, 1.0},
+            {0.0, Double.POSITIVE_INFINITY, -1.0, 1.0},
         };
     }
 
diff --git 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/WeibullDistributionTest.java
 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/WeibullDistributionTest.java
index bc7689bc..ae1b8514 100644
--- 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/WeibullDistributionTest.java
+++ 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/WeibullDistributionTest.java
@@ -46,6 +46,8 @@ class WeibullDistributionTest extends 
BaseContinuousDistributionTest {
             {-0.1, 2.0},
             {1.0, 0.0},
             {1.0, -0.1},
+            {Double.NaN, 2.0},
+            {1.0, Double.NaN},
         };
     }
 
diff --git 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ZipfDistributionTest.java
 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ZipfDistributionTest.java
index efed1b77..403f165e 100644
--- 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ZipfDistributionTest.java
+++ 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ZipfDistributionTest.java
@@ -45,6 +45,7 @@ class ZipfDistributionTest  extends 
BaseDiscreteDistributionTest {
             {0, 1.0},
             {-1, 1.0},
             {1, -0.1},
+            {1, Double.NaN},
         };
     }
 
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index c393e874..737ed284 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -53,6 +53,10 @@ If the output is not quite correct, check for invisible 
trailing spaces!
   </properties>
   <body>
     <release version="1.4" date="TBD" description="Adds new features (requires 
Java 8).">
+      <action dev="aherbert" type="fix" due-to="Security scan, Aex Herbert" 
issue="STATISTICS-96">
+        "commons-statistics-distribution": Checks added to distribution factory
+        functions for NaN parameters that invalidate the distribution.
+      </action>
       <action dev="aherbert" type="fix" due-to="Security scan, Aex Herbert" 
issue="STATISTICS-95">
         "NormalConfidenceInterval": Validate mean is finite and variance is 
positive finite.
       </action>
diff --git a/src/conf/pmd/pmd-ruleset.xml b/src/conf/pmd/pmd-ruleset.xml
index 140b212c..1dfcc76a 100644
--- a/src/conf/pmd/pmd-ruleset.xml
+++ b/src/conf/pmd/pmd-ruleset.xml
@@ -195,7 +195,7 @@
       <!-- Logic inversion allows detection of NaN for parameters that are 
expected in a range -->
       <property name="violationSuppressXPath"
         value="./ancestor-or-self::ClassDeclaration[@SimpleName='Arguments'
-          or @Name='Quantile']"/>
+          or @Name='Quantile' or matches(@SimpleName, '^.*Distribution$')]"/>
     </properties>
   </rule>
   <rule ref="category/java/design.xml/UselessOverridingMethod">

Reply via email to