[Gmp-commit] /var/hg/gmp: mpn/generic/bsqrtinv.c: At first iterate on a singl...

mercurial at gmplib.org mercurial at gmplib.org
Wed Jun 17 08:50:08 CEST 2026


details:   /var/hg/gmp/rev/367030886996
changeset: 18507:367030886996
user:      Marco Bodrato <bodrato at mail.dm.unipi.it>
date:      Tue Jun 16 18:15:41 2026 +0200
description:
mpn/generic/bsqrtinv.c: At first iterate on a single limb.

diffstat:

 mpn/generic/bsqrtinv.c |  13 +++++++++++--
 1 files changed, 11 insertions(+), 2 deletions(-)

diffs (26 lines):

diff -r a89e395f552d -r 367030886996 mpn/generic/bsqrtinv.c
--- a/mpn/generic/bsqrtinv.c	Mon Jun 15 18:40:11 2026 +0200
+++ b/mpn/generic/bsqrtinv.c	Tue Jun 16 18:15:41 2026 +0200
@@ -72,11 +72,20 @@
     }
   else
     {
-      if ((yp[0] & 7) != 1)
+      mp_limb_t t0, r0, y0 = *yp;
+
+      if ((y0 & 7) != 1)
 	return 0;
 
+      r0 = 33 + ((y0 & 8) * 5 >> 2) - ((y0 & 16) >> 1);
+      do {
+	t0 = r0 * r0 * y0 >> 1;
+	r0 -= r0 * t0;
+      } while ((t0 & (GMP_NUMB_MAX >> (GMP_NUMB_BITS >> 1))) != 0);
+      *rp = r0 & GMP_NUMB_MAX;
+
       d = 0;
-      for (; bnb != 2; bnb = (bnb + 2) >> 1)
+      for (; bnb >= GMP_NUMB_BITS; bnb = (bnb + 2) >> 1)
 	order[d++] = bnb;
 
       for (i = d - 1; i >= 0; i--)


More information about the gmp-commit mailing list