This is the mail archive of the guile@cygnus.com mailing list for the guile project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
> > The old favourite, Newton's iterative square root looks like:
>
> Right; but you've totally skipped the interesting part. It has to
> work in bignum arithmetic only.
OK, I was hoping that you would do the fiddly work,
don't say I'm not good to you:
(define (square-root-recur C X)
(let* ((x2 (quotient (+ (quotient (+ C X -1) X) X) 2)))
(cond ((>= x2 X) X)
(else (square-root-recur C x2)))))
(define (square-root C)
(cond ((< C 0) (please-install-complex-support))
((< C 1) 0)
(else (square-root-recur C C))))
That seems to get the same answer as bc for the numbers that
I felt like checking. Probably raiding a different bignum
library is better than figuring it all out again, unless there
are some very special requirements for guile that I'm not aware
of. Isn't the source for bc a GPL item anyhow?
- Tel