# Square root calculation in Scheme (SICP Exercise 1.7)

I have done exercise 1.7 in SICP (calculate square root precision when change in guesses is under a certain value), but I am calling the change-in-precision function twice in each iteration, which disturbs me. I wonder if there is a better way to implement this.

(define (average . ns) (/ (apply + ns) (length ns)))

(define (change-in-precision guess x)
( - (- guess (average guess (/ x guess)))))

(define (sqrt guess x)
(if (< (abs (change-in-precision guess x)) (/ 0.00000001 guess))
(+ guess (change-in-precision guess x))
(sqrt (+ guess (change-in-precision guess x)) x)))


In change-in-precision, you can avoid the negation by swapping the operands for the subtraction.
In sqrt, if the guess is already close enough, why not just return guess?
To eliminate the repeated call to change-in-precision, use a let to define a variable delta.
The two branches of the if should be indented.
• (/ 0.00000001 guess) is not the same as (/ guess 100000000); in the former, guess is in the denominator, whereas in the latter, guess is in the numerator. But (/ 1 guess 100000000) could work. Not sure if it's "more readable" at that stage, though. – Chris Jester-Young Feb 20 '16 at 18:04