BigInteger.java (euclidInv): Make sure quot and rem are in canonical form after divide().
authorRaif Naffah <raif@fl.net.au>
Thu, 19 Dec 2002 06:59:46 +0000 (06:59 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Thu, 19 Dec 2002 06:59:46 +0000 (06:59 +0000)
2002-12-18  Raif Naffah  <raif@fl.net.au>

* java/math/BigInteger.java (euclidInv): Make sure quot and rem are in
canonical form after divide().
(modInverse): Likewise.

From-SVN: r60292

libjava/ChangeLog
libjava/java/math/BigInteger.java

index ae8559c..1340fc0 100644 (file)
@@ -1,3 +1,9 @@
+2002-12-18  Raif Naffah  <raif@fl.net.au>
+
+       * java/math/BigInteger.java (euclidInv): Make sure quot and rem are in
+       canonical form after divide().
+       (modInverse): Likewise.
+
 2002-12-13  Casey Marshall  <rsdio@metastatic.org>
            Mark Wielaard  <mark@klomp.org>
 
index e8c6b1d..ac21ecc 100644 (file)
@@ -1113,6 +1113,9 @@ public class BigInteger extends Number implements Comparable
        BigInteger rem = new BigInteger();
        BigInteger quot = new BigInteger();
        divide(a, b, quot, rem, FLOOR);
+        // quot and rem may not be in canonical form. ensure
+        rem.canonicalize();
+        quot.canonicalize();
         xy = euclidInv(b, rem, quot);
       }
 
@@ -1192,6 +1195,9 @@ public class BigInteger extends Number implements Comparable
        BigInteger rem = new BigInteger();
        BigInteger quot = new BigInteger();
        divide(x, y, quot, rem, FLOOR);
+        // quot and rem may not be in canonical form. ensure
+        rem.canonicalize();
+        quot.canonicalize();
        result = euclidInv(y, rem, quot)[swapped ? 0 : 1];
 
        // Result can't be negative, so make it positive by adding the