Hi! Mark H Weaver <m...@netris.org> writes:
> exact-integer-sqrt is broken. It is now implemented in (rnrs base) by > doing an inexact sqrt and coercing the answer to exact. This fails > badly for large integers: > > scheme@(guile-user)> (use-modules ((rnrs base) #:version (6))) > scheme@(guile-user)> (exact-integer-sqrt (expt 10 50)) > $1 = 10000000000000000905969664 > $2 = -18119393280000000820781032088272896 > > This patch adds a proper implementation to guile core, which does this: > > scheme@(guile-user)> (exact-integer-sqrt (expt 10 50)) > $1 = 10000000000000000000000000 > $2 = 0 > > I'd like to push this to stable-2.0. Any objections? Not from me! One remark: > --- a/libguile/numbers.h > +++ b/libguile/numbers.h > @@ -289,6 +289,7 @@ SCM_API SCM scm_log (SCM z); > SCM_API SCM scm_log10 (SCM z); > SCM_API SCM scm_exp (SCM z); > SCM_API SCM scm_sqrt (SCM z); > +SCM_API void scm_exact_integer_sqrt (SCM k, SCM *s, SCM *r); Shouldn’t it be SCM_INTERNAL? (If yes, then the doc should use @deffn instead of @deftypefn.) Thanks, Ludo’.