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