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-numbers.git

commit 40dae8c00511e44fcd0d904f1569520dd5586b33
Author: Alex Herbert <[email protected]>
AuthorDate: Wed Apr 8 21:29:04 2020 +0100

    Fraction.of(numerator) to directly invoke special fraction constructor.
    
    When the denominator is 1 there is no requirement to use the reduction
    logic.
    
    This method is invoked for use in arithmetic with integers with a
    corresponding performance gain for avoiding the reduction logic.
---
 .../apache/commons/numbers/fraction/BigFraction.java | 20 +++++++++++++++++---
 .../apache/commons/numbers/fraction/Fraction.java    | 18 +++++++++++++++---
 2 files changed, 32 insertions(+), 6 deletions(-)

diff --git 
a/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/BigFraction.java
 
b/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/BigFraction.java
index d5c52b1..d0411f0 100644
--- 
a/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/BigFraction.java
+++ 
b/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/BigFraction.java
@@ -20,6 +20,7 @@ import java.io.Serializable;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.math.RoundingMode;
+import java.util.Objects;
 import org.apache.commons.numbers.core.ArithmeticUtils;
 import org.apache.commons.numbers.core.NativeOperators;
 
@@ -80,6 +81,18 @@ public final class BigFraction
     }
 
     /**
+     * Private constructor: Instances are created using factory methods.
+     *
+     * <p>This sets the denominator to 1.
+     *
+     * @param num Numerator (must not be null).
+     */
+    private BigFraction(BigInteger num) {
+        numerator = num;
+        denominator = BigInteger.ONE;
+    }
+
+    /**
      * Create a fraction given the double value and either the maximum
      * error allowed or the maximum number of denominator digits.
      *
@@ -308,7 +321,7 @@ public final class BigFraction
      * @return a new instance.
      */
     public static BigFraction of(final int num) {
-        return new BigFraction(BigInteger.valueOf(num), BigInteger.ONE);
+        return new BigFraction(BigInteger.valueOf(num));
     }
 
     /**
@@ -318,7 +331,7 @@ public final class BigFraction
      * @return a new instance.
      */
     public static BigFraction of(final long num) {
-        return new BigFraction(BigInteger.valueOf(num), BigInteger.ONE);
+        return new BigFraction(BigInteger.valueOf(num));
     }
 
     /**
@@ -329,7 +342,8 @@ public final class BigFraction
      * @throws NullPointerException if numerator is null.
      */
     public static BigFraction of(final BigInteger num) {
-        return new BigFraction(num, BigInteger.ONE);
+        Objects.requireNonNull(num, "numerator");
+        return new BigFraction(num);
     }
 
     /**
diff --git 
a/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/Fraction.java
 
b/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/Fraction.java
index 85ee30d..b6dcef6 100644
--- 
a/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/Fraction.java
+++ 
b/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/Fraction.java
@@ -100,6 +100,18 @@ public final class Fraction
     }
 
     /**
+     * Private constructor: Instances are created using factory methods.
+     *
+     * <p>This sets the denominator to 1.
+     *
+     * @param num Numerator.
+     */
+    private Fraction(int num) {
+        numerator = num;
+        denominator = 1;
+    }
+
+    /**
      * Create a fraction given the double value and either the maximum error
      * allowed or the maximum number of denominator digits.
      *
@@ -276,7 +288,7 @@ public final class Fraction
      * @return a new instance.
      */
     public static Fraction of(final int num) {
-        return of(num, 1);
+        return new Fraction(num);
     }
 
     /**
@@ -396,9 +408,9 @@ public final class Fraction
 
     /**
      * {@inheritDoc}
-     * 
+     *
      * <p>Raises an exception if the fraction is equal to zero.
-     * 
+     *
      * @throws ArithmeticException if the current numerator is {@code zero}
      */
     @Override

Reply via email to