Skip to content

Commit

Permalink
add sqrt and cbrt (cubic roots finder) functions
Browse files Browse the repository at this point in the history
  • Loading branch information
fstronin committed Jan 7, 2021
0 parents commit 137dcaf
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 0 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# SICP
7 changes: 7 additions & 0 deletions cbrt-test.rkt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#lang racket/base

(require rackunit "cbrt.rkt")

(check-equal? (round (cbrt 27)) 3.0 "Is cubic root of 27 is 3?")
(check-equal? (round (cbrt 1000)) 10.0 "Is cubic root of 1000 is 10?")
(check-equal? (round (cbrt 848471250563)) 9467.0 "Is square root of 848471250563 is 9467?")
15 changes: 15 additions & 0 deletions cbrt.rkt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#lang racket

(define (cbrt x)
(define (square n) (* n n))
(define (improve guess)
(/ (+ (* guess 2) (/ x (square guess))) 3))
(define (good-enough? previous-guess guess)
(< (abs (/ (- guess previous-guess) guess)) 0.00000000001))
(define (cbrt-iter guess)
(if (good-enough? guess (improve guess))
guess
(cbrt-iter (improve guess))))
(cbrt-iter 1.0))

(provide cbrt)
7 changes: 7 additions & 0 deletions sqrt-test.rkt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#lang racket/base

(require rackunit "sqrt.rkt")

(check-equal? (round (sqrt 81)) 9.0 "Is square root of 81 is 9?")
(check-equal? (round (sqrt 4096)) 64.0 "Is square root of 4096 is 64?")
(check-equal? (round (sqrt 9801)) 99.0 "Is square root of 9801 is 99?")
17 changes: 17 additions & 0 deletions sqrt.rkt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#lang racket

(define (sqrt x)
(define (square n) (* n n))
(define (good-enough? previous-guess guess)
(< (abs (/ (- guess previous-guess) guess)) 0.00000000001))
(define (average x y)
(/ (+ x y) 2))
(define (improve guess)
(average guess (/ x guess)))
(define (sqrt-iter guess)
(if (good-enough? guess (improve guess))
guess
(sqrt-iter (improve guess))))
(sqrt-iter 1.0))

(provide sqrt)

0 comments on commit 137dcaf

Please sign in to comment.