Pollard's rho algorithm for computing discrete logs.
[u/mdw/catacomb] / mpx.c
diff --git a/mpx.c b/mpx.c
index 36b424c..327699c 100644 (file)
--- a/mpx.c
+++ b/mpx.c
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: mpx.c,v 1.7 1999/12/22 15:49:07 mdw Exp $
+ * $Id: mpx.c,v 1.9 2000/06/26 07:52:50 mdw Exp $
  *
  * Low-level multiprecision arithmetic
  *
 /*----- Revision history --------------------------------------------------* 
  *
  * $Log: mpx.c,v $
+ * Revision 1.9  2000/06/26 07:52:50  mdw
+ * Portability fix for the bug fix.
+ *
+ * Revision 1.8  2000/06/25 12:59:02  mdw
+ * (mpx_udiv): Fix bug in quotient digit estimation.
+ *
  * Revision 1.7  1999/12/22 15:49:07  mdw
  * New function for division by a small integer.
  *
@@ -824,21 +830,19 @@ void mpx_udiv(mpw *qv, mpw *qvl, mpw *rv, mpw *rvl,
 
       {
        mpd yh = (mpd)d * q;
-       mpd yl = (mpd)dd * q;
+       mpd yy = (mpd)dd * q;
+       mpw yl;
 
-       if (yl > MPW_MAX) {
-         yh += yl >> MPW_BITS;
-         yl &= MPW_MAX;
-       }
+       if (yy > MPW_MAX)
+         yh += yy >> MPW_BITS;
+       yl = MPW(yy);
 
        while (yh > rh || (yh == rh && yl > rrr)) {
          q--;
          yh -= d;
-         if (yl < dd) {
-           yh++;
-           yl += MPW_MAX;
-         }
-         yl -= dd;
+         if (yl < dd)
+           yh--;
+         yl = MPW(yl - dd);
        }
       }