Skip to content

Instantly share code, notes, and snippets.

@dyba
Last active December 9, 2015 23:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dyba/4348171 to your computer and use it in GitHub Desktop.
Save dyba/4348171 to your computer and use it in GitHub Desktop.
SICP 1.7 Solution
(define (good-enough? guess next-guess)
(< (/ (abs (- guess next-guess)) guess) 0.001))
(define (average x y)
(/ (+ x y) 2))
(define (improve guess x)
(average guess (/ x guess)))
(define (sqrt-iter guess x)
(if (good-enough? guess (improve guess x))
guess
(sqrt-iter (improve guess x)
x)))
' Just for kicks
Function Average(X As Double, Y As Double) As Double
Average = (X + Y) / 2
End Function
Function Improve(Guess As Double, NextGuess As Double) As Double
Improve = Average(Guess, X / Guess)
End Function
Function IsGoodEnough(Guess As Double, NextGuess As Double) As Boolean
IsGoodEnough = (Abs(Guess - NextGuess) / Guess) < 0.001
End Function
Function SqrtIter(Guess As Double, X As Double) As Double
If (IsGoodEnough(Guess, Improve(Guess, X))) Then
SqrtIter = Guess
Else
SqrtIter = SqrtIter(Improve(Guess, X), X)
End If
End Function
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment