configure.ac: Replace with a new version.
[u/mdw/catacomb] / mpmul.c
diff --git a/mpmul.c b/mpmul.c
index e5d6a4a..1f932b0 100644 (file)
--- a/mpmul.c
+++ b/mpmul.c
@@ -1,13 +1,13 @@
 /* -*-c-*-
  *
- * $Id: mpmul.c,v 1.2 2000/07/09 21:31:10 mdw Exp $
+ * $Id: mpmul.c,v 1.5 2004/04/08 01:36:15 mdw Exp $
  *
  * Multiply many small numbers together
  *
  * (c) 2000 Straylight/Edgeware
  */
 
-/*----- Licensing notice --------------------------------------------------* 
+/*----- Licensing notice --------------------------------------------------*
  *
  * This file is part of Catacomb.
  *
  * it under the terms of the GNU Library General Public License as
  * published by the Free Software Foundation; either version 2 of the
  * License, or (at your option) any later version.
- * 
+ *
  * Catacomb is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Library General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Library General Public
  * License along with Catacomb; if not, write to the Free
  * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
  * MA 02111-1307, USA.
  */
 
-/*----- Revision history --------------------------------------------------* 
- *
- * $Log: mpmul.c,v $
- * Revision 1.2  2000/07/09 21:31:10  mdw
- * Fix bug, and add a test rig.
- *
- * Revision 1.1  2000/07/01 11:21:39  mdw
- * New interface for computing products of many (small) integers.
- *
- */
-
 /*----- Header files ------------------------------------------------------*/
 
 #include "mp.h"
@@ -72,6 +61,9 @@ void mpmul_init(mpmul *b)
  *             context; this sort of rules out @mp_build@ integers.
  */
 
+#define HWM (MPMUL_DEPTH - 20)
+#define LWM (MPMUL_DEPTH / 2)
+
 void mpmul_add(mpmul *b, mp *x)
 {
   size_t i = b->i;
@@ -145,8 +137,7 @@ mp *mp_factorial(unsigned long i)
     x = mp_fromulong(x, j);
     mpmul_add(&b, x);
   }
-  if (x)
-    mp_drop(x);
+  mp_drop(x);
   return (mpmul_done(&b));
 }
 
@@ -162,7 +153,7 @@ static int vfact(dstr *v)
   mp *fx = *(mp **)v[1].buf;
   mp *y = mp_factorial(x);
   int ok = 1;
-  if (MP_CMP(fx, !=, y)) {
+  if (!MP_EQ(fx, y)) {
     fprintf(stderr, "factorial failed\n");
     MP_FPRINTF(stderr, (stderr, "%lu! = ", x), fx);
     MP_EPRINT("result", y);