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));
}
/**