From 4c24ac2716caccb1d44ae7018e831e53fd4b79c1 Mon Sep 17 00:00:00 2001 From: "Raif S. Naffah" Date: Thu, 20 Feb 2003 16:55:15 +0000 Subject: [PATCH] BigInteger.java (euclidInv): Take result array as an argument. 2003-02-20 Raif S. Naffah * java/math/BigInteger.java (euclidInv): Take result array as an argument. Updated all callers. (modInverse): Removed unused variables. From-SVN: r63170 --- libjava/ChangeLog | 6 ++++++ libjava/java/math/BigInteger.java | 29 +++++++++++++---------------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 5da32eb2bfb..659311f4ec7 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,9 @@ +2003-02-20 Raif S. Naffah + + * java/math/BigInteger.java (euclidInv): Take result array as an + argument. Updated all callers. + (modInverse): Removed unused variables. + 2003-02-20 Alexandre Oliva * configure.in: Propagate ORIGINAL_LD_FOR_MULTILIBS to diff --git a/libjava/java/math/BigInteger.java b/libjava/java/math/BigInteger.java index 6a17cf3b75c..6f919f785cc 100644 --- a/libjava/java/math/BigInteger.java +++ b/libjava/java/math/BigInteger.java @@ -1017,8 +1017,8 @@ public class BigInteger extends Number implements Comparable return xy; } - private static final BigInteger[] euclidInv(BigInteger a, BigInteger b, - BigInteger prevDiv) + private static final void euclidInv(BigInteger a, BigInteger b, + BigInteger prevDiv, BigInteger[] xy) { if (b.isZero()) throw new ArithmeticException("not invertible"); @@ -1027,20 +1027,19 @@ public class BigInteger extends Number implements Comparable { // Success: values are indeed invertible! // Bottom of the recursion reached; start unwinding. - return new BigInteger[] { neg(prevDiv), ONE }; + xy[0] = neg(prevDiv); + xy[1] = ONE; + return; } - BigInteger[] result; // Recursion happens in the following conditional! // If a just contains an int, then use integer math for the rest. if (a.words == null) { int[] xyInt = euclidInv(b.ival, a.ival % b.ival, a.ival / b.ival); - result = new BigInteger[] { // non-shared BI - new BigInteger(xyInt[0]), - new BigInteger(xyInt[1]) - }; + xy[0] = new BigInteger(xyInt[0]); + xy[1] = new BigInteger(xyInt[1]); } else { @@ -1050,13 +1049,12 @@ public class BigInteger extends Number implements Comparable // quot and rem may not be in canonical form. ensure rem.canonicalize(); quot.canonicalize(); - result = euclidInv(b, rem, quot); + euclidInv(b, rem, quot, xy); } - BigInteger t = result[0]; - result[0] = add(result[1], times(t, prevDiv), -1); - result[1] = t; - return result; + BigInteger t = xy[0]; + xy[0] = add(xy[1], times(t, prevDiv), -1); + xy[1] = t; } public BigInteger modInverse(BigInteger y) @@ -1124,9 +1122,8 @@ public class BigInteger extends Number implements Comparable // quot and rem may not be in canonical form. ensure rem.canonicalize(); quot.canonicalize(); - BigInteger xy0 = new BigInteger(); - BigInteger xy1 = new BigInteger(); - BigInteger[] xy = euclidInv(y, rem, quot); + BigInteger[] xy = new BigInteger[2]; + euclidInv(y, rem, quot, xy); result = swapped ? xy[0] : xy[1]; // Result can't be negative, so make it positive by adding the -- 2.30.2