Last active
October 7, 2018 08:39
-
-
Save jargnar/2caaa695fc216048d616d73c71d96a08 to your computer and use it in GitHub Desktop.
Square-rooting in Racket
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#lang racket | |
(define (mysqrt x) | |
;; a procedure to calculate square root of a number | |
;; starts with a guess and improves it until it is good enough | |
;; a guess can be improved by averaging itself with x/guess | |
(define (avg a b) (/ (+ a b) 2.0)) | |
(define (improve-guess guess x) (avg guess (/ x guess))) | |
;; a guess is good enough when guess^2 tends to x | |
(define (good-enough? guess x) (< (abs (- (* guess guess) x)) 0.0001)) | |
;; try and improve the guess until it is good enough | |
(define (try-guess guess x) | |
(if (good-enough? guess x) guess | |
(try-guess (improve-guess guess x) x))) | |
;; start with guess = 1 | |
(try-guess 1.0 x)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hmm.