7 #include "cln/integer.h"
12 #include "cln/number.h"
14 #include "cln/integer_io.h"
15 #include "cln/abort.h"
21 cl_boolean isqrt (const cl_I& x, cl_I* w)
24 fprint(stderr, "isqrt: applied to negative number: ");
30 var const uintD* x_MSDptr;
32 var const uintD* x_LSDptr;
33 I_to_NDS_nocopy(x, x_MSDptr=,x_len=,x_LSDptr=,cl_true,); // Digit sequence >=0 zu x
35 var cl_boolean squarep;
36 UDS_sqrt(x_MSDptr,x_len,x_LSDptr, &y, squarep=); // Wurzel ziehen
37 *w = NUDS_to_I(y.MSDptr,y.len); // als Integer
40 // Bit complexity (x of length N): O(M(N)).