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 2020/04/16 12:18:27 UTC

[commons-numbers] 12/26: Fraction: efficient divide by integer

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 368187dd96e44430ed3eff270dfec171298a7149
Author: Alex Herbert <ah...@apache.org>
AuthorDate: Tue Apr 14 00:21:47 2020 +0100

    Fraction: efficient divide by integer
---
 .../main/java/org/apache/commons/numbers/fraction/Fraction.java  | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

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 5eb3beb..d424045 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
@@ -595,6 +595,7 @@ public final class Fraction
 
         // knuth 4.5.1
         // Make sure we don't overflow unless the result *must* overflow.
+        // (see multiply(Fraction) using value / 1 as the argument).
         final int d2 = ArithmeticUtils.gcd(value, denominator);
         return new Fraction(Math.multiplyExact(numerator, value / d2),
                             denominator / d2);
@@ -641,7 +642,13 @@ public final class Fraction
             return ZERO;
         }
         // Multiply by reciprocal
-        return multiply(new Fraction(1, value));
+
+        // knuth 4.5.1
+        // Make sure we don't overflow unless the result *must* overflow.
+        // (see multiply(Fraction) using 1 / value as the argument).
+        final int d1 = ArithmeticUtils.gcd(numerator, value);
+        return new Fraction(numerator / d1,
+                            Math.multiplyExact(denominator, value / d1));
     }
 
     /**