7 #include "cl_integer.h"
12 #include "cl_number.h"
14 #include "cl_integer_io.h"
19 cl_boolean isqrt (const cl_I& x, cl_I* w)
22 fprint(cl_stderr, "isqrt: applied to negative number: ");
24 fprint(cl_stderr, "\n");
28 var const uintD* x_MSDptr;
30 var const uintD* x_LSDptr;
31 I_to_NDS_nocopy(x, x_MSDptr=,x_len=,x_LSDptr=,cl_true,); // Digit sequence >=0 zu x
33 var cl_boolean squarep;
34 UDS_sqrt(x_MSDptr,x_len,x_LSDptr, &y, squarep=); // Wurzel ziehen
35 *w = NUDS_to_I(y.MSDptr,y.len); // als Integer
38 // Bit complexity (x of length N): O(M(N)).