gmp-devel Digest, Vol 1, Issue 86
Paul Zimmermann
Paul.Zimmermann at loria.fr
Mon Sep 15 15:27:17 CEST 2003
Two answers to today's digest:
To accomodate vector machines, we might want to put mpn_mul_n,
mpn_sqr_n, mpn_mul, and the various karatsuba and toom routines
in a single file. Or, we might want to move mpn_sqr_n to
mul_n.c.
Any informed opinions?
Perhaps we could put all squaring functions in sqr_n.c, while still
including them in mul_n.c...
int
nisse (mp_srcptr ap, mp_size_t an, mp_srcptr bp, mp_size_t bn, mp_srcptr dp, mp_size_t dn)
{
/* Check an, bn, dn for trivial cases where the sizes of these alone
can determine A - B < D. Left as an exercise to the user. */
foo;
/* Here assume that an = bn, dn < an. */
for (i = dn; i < an; i++)
{
if (ap[i] != bp[i])
{
/* We found a difference at higher significance that MSB of D. */
return NO;
}
}
This could be replaced by mpn_cmp (ap + dn, bp + dn, an - dn), isn't it?
mpn_sub_n (tmp, a, b, n); /* cannot give carry out */
if (mpn_cmp (tmp, dp, n) < 0)
return YES;
else
return NO;
}
This is O(n) while on average only O(1) work is required.
Since we know a > b, it would be better to compute an
approximation of a-b from left to right (which may be at
most one bit wrong) and compare it to d.
Paul
More information about the gmp-devel
mailing list