void __dvd(const mp_no *x, const mp_no *y, mp_no *z, int p) {

  mp_no w;

  if (X[0] == ZERO)    Z[0] = ZERO;
  else                {__inv(y,&w,p);   __mul(x,&w,z,p);}
  return;
}
Exemple #2
0
/* Divide *X by *Y and store result in *Z.  X and Y may overlap but not X and Z
   or Y and Z.  Relative error bound:
   - For P = 2: 2.001 * R ^ (1 - P)
   - For P = 3: 2.063 * R ^ (1 - P)
   - For P > 3: 3.001 * R ^ (1 - P)

   *X = 0 is not permissible.  */
void
SECTION
__dvd (const mp_no *x, const mp_no *y, mp_no *z, int p)
{
  mp_no w;

  if (X[0] == 0)
    Z[0] = 0;
  else
    {
      __inv (y, &w, p);
      __mul (x, &w, z, p);
    }
}