1 // cl_LF_len_incsqrtx().
14 uintC cl_LF_len_incsqrtx (uintC n)
16 // Methode bei intDsize=16:
17 // Allgemein: intDsize*n + sqrt(intDsize*n) + 2 + 31 < intDsize*(n+inc)
18 // <==> sqrt(intDsize*n) + 33 < intDsize*inc
19 // <==> sqrt(intDsize*n) < intDsize*inc - 33
20 // <==> intDsize*n < intDsize^2*inc^2 - 66*intDsize*inc + 1089
21 // <==> n <= intDsize*inc^2 - 66*inc + floor(1089/intDsize)
23 #define NMAX(k) (uintL)((intDsize*(k)-66)*(k)+floor(1089,intDsize))
24 #define FITS(n,k) ((intDsize*(k) > 33) && ((n) <= NMAX(k)))
25 #define n_max (uintL)(bitm(intCsize)-1)
26 #define TRYINC(inc) FITS(n_max,inc) || FITS(n,inc) ? RETINC(inc) :
28 /* at this point we know n <= NMAX(inc) */ \
29 /* Check whether n + (inc) overflows. */ \
30 ((NMAX(inc) <= n_max-(inc)) || (n <= n_max-(inc)) ? n+(inc) : n_max)
31 #define TEST(i) TRYINC(1UL<<i)
46 // No TEST(14), because NMAX(1UL<<14) is already out of range.