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);

Reply via email to