Checking if A - B > D

Torbjorn Granlund tege at
Sun Sep 14 15:14:24 CEST 2003

I and Kalle came up a solution that we think will work.
I didn't look very closely at your solutions, but if
the simple code below doesn't do the job, I will look at
it more closely.

The area tmp needs to be dn limbs long, which might be acceptable.

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.  */

  /* 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;

  mpn_sub_n (tmp, a, b, n);	/* cannot give carry out */
  if (mpn_cmp (tmp, dp, n) < 0)
    return YES;
    return NO;


More information about the gmp-devel mailing list