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
