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 0c58ac0c23726fee6d795214cbb252a52881c37d
Author: aherbert <aherb...@apache.org>
AuthorDate: Fri Jul 30 12:16:28 2021 +0100

    Cache upper - lower + 1 for computations
---
 .../distribution/UniformDiscreteDistribution.java         | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/UniformDiscreteDistribution.java
 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/UniformDiscreteDistribution.java
index 959ee2f..9fce06e 100644
--- 
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/UniformDiscreteDistribution.java
+++ 
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/UniformDiscreteDistribution.java
@@ -31,10 +31,10 @@ public class UniformDiscreteDistribution extends 
AbstractDiscreteDistribution {
     private final int lower;
     /** Upper bound (inclusive) of this distribution. */
     private final int upper;
-    /** "upper" + "lower" (to avoid overflow). */
+    /** "upper" + "lower" (as a double to avoid overflow). */
     private final double upperPlusLower;
-    /** "upper" - "lower" (to avoid overflow). */
-    private final double upperMinusLower;
+    /** "upper" - "lower" + 1 (as a double to avoid overflow). */
+    private final double upperMinusLowerPlus1;
 
     /**
      * Creates a new uniform integer distribution using the given lower and
@@ -53,7 +53,7 @@ public class UniformDiscreteDistribution extends 
AbstractDiscreteDistribution {
         this.lower = lower;
         this.upper = upper;
         upperPlusLower = (double) upper + (double) lower;
-        upperMinusLower = (double) upper - (double) lower;
+        upperMinusLowerPlus1 = (double) upper - (double) lower + 1;
     }
 
     /** {@inheritDoc} */
@@ -62,7 +62,7 @@ public class UniformDiscreteDistribution extends 
AbstractDiscreteDistribution {
         if (x < lower || x > upper) {
             return 0;
         }
-        return 1 / (upperMinusLower + 1);
+        return 1.0 / upperMinusLowerPlus1;
     }
 
     /** {@inheritDoc} */
@@ -74,7 +74,7 @@ public class UniformDiscreteDistribution extends 
AbstractDiscreteDistribution {
         if (x > upper) {
             return 1;
         }
-        return (x - lower + 1) / (upperMinusLower + 1);
+        return (x - lower + 1) / upperMinusLowerPlus1;
     }
 
     /**
@@ -96,8 +96,7 @@ public class UniformDiscreteDistribution extends 
AbstractDiscreteDistribution {
      */
     @Override
     public double getVariance() {
-        final double n = upperMinusLower + 1;
-        return ONE_TWELFTH * (n * n - 1);
+        return ONE_TWELFTH * (upperMinusLowerPlus1 * upperMinusLowerPlus1 - 1);
     }
 
     /**

Reply via email to