Repository: commons-numbers Updated Branches: refs/heads/master ea2c1d79d -> 910cd934b
NUMBERS-67: Method "pow". Project: http://git-wip-us.apache.org/repos/asf/commons-numbers/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-numbers/commit/c4e612ed Tree: http://git-wip-us.apache.org/repos/asf/commons-numbers/tree/c4e612ed Diff: http://git-wip-us.apache.org/repos/asf/commons-numbers/diff/c4e612ed Branch: refs/heads/master Commit: c4e612eda82314741bd69af912a29eb9bc9949dd Parents: ea2c1d7 Author: Gilles Sadowski <gil...@harfang.homelinux.org> Authored: Mon Feb 5 02:39:39 2018 +0100 Committer: Gilles Sadowski <gil...@harfang.homelinux.org> Committed: Mon Feb 5 02:39:39 2018 +0100 ---------------------------------------------------------------------- .../commons/numbers/fraction/Fraction.java | 19 +++++++++++++++++++ .../commons/numbers/fraction/FractionTest.java | 20 ++++++++++++++++++++ 2 files changed, 39 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-numbers/blob/c4e612ed/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/Fraction.java ---------------------------------------------------------------------- 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 673d0d5..5639be1 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 @@ -555,6 +555,25 @@ public class Fraction } /** + * @param n Power. + * @return {@code this^n} + */ + public Fraction pow(final int n) { + if (n == 0) { + return ONE; + } + if (numerator == 0) { + return this; + } + + return n < 0 ? + new Fraction(ArithmeticUtils.pow(denominator, -n), + ArithmeticUtils.pow(numerator, -n)) : + new Fraction(ArithmeticUtils.pow(numerator, n), + ArithmeticUtils.pow(denominator, n)); + } + + /** * <p>Divide the value of this fraction by another.</p> * * @param fraction the fraction to divide by, must not be {@code null} http://git-wip-us.apache.org/repos/asf/commons-numbers/blob/c4e612ed/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/FractionTest.java ---------------------------------------------------------------------- diff --git a/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/FractionTest.java b/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/FractionTest.java index d35092b..5ea5f4e 100644 --- a/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/FractionTest.java +++ b/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/FractionTest.java @@ -499,6 +499,26 @@ public class FractionTest { } @Test + public void testPow() { + Fraction a = new Fraction(3, 7); + assertFraction(1, 1, a.pow(0)); + assertFraction(3, 7, a.pow(1)); + assertFraction(7, 3, a.pow(-1)); + assertFraction(9, 49, a.pow(2)); + assertFraction(49, 9, a.pow(-2)); + + Fraction b = new Fraction(3, -7); + assertFraction(1, 1, b.pow(0)); + assertFraction(-3, 7, b.pow(1)); + assertFraction(-7, 3, b.pow(-1)); + assertFraction(9, 49, a.pow(2)); + assertFraction(49, 9, a.pow(-2)); + + Fraction c = new Fraction(0, -11); + assertFraction(0, 1, c.pow(Integer.MAX_VALUE)); + } + + @Test public void testSubtract() { Fraction a = new Fraction(1, 2); Fraction b = new Fraction(2, 3);