forked from paulanthonywilson/scip_classy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsicp_1.8_src.rkt
80 lines (50 loc) · 1.61 KB
/
sicp_1.8_src.rkt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
Exercise:
Newton's method for cube roots is based on the fact that if y is an approximation to the cube root of x, then a better approximation is given by the value
x/y^2 + 2y
----------
3
Use this formula to implement a cube-root procedure analogous to the square-root procedure.
Square Root:
(define (sqrt-iter guess x)
(if (good-enough? guess x)
guess
(sqrt-iter (improve guess x) x)
)
)
(define (improve guess x) (average guess (/ x guess)))
(define (average x y) (/ (+ x y) 2))
(define (good-enough? guess x) (< (abs (- (square guess) x)) 0.001))
(define (sqrt x) (sqrt-iter 1.0 x))
(define (square x) (* x x))
-------------------------
Cubed Root:
(define (cbrt-iter guess x)
(if (good-enough? guess x)
guess
(cbrt-iter (improve guess x) x)
)
)
(define (improve guess x) (average (/ x (square guess)) (* 2 guess)))
(define (average x y) (/ (+ x y) 3))
(define (good-enough? guess x) (< (abs (- (cube guess) x)) 0.001))
(define (cbrt x) (cbrt-iter 1.0 x))
(define (square x) (* x x))
(define (cube x) (* x x x))
....... Examples .........
Changes to improve:
# average y + x/y
# average x/y^2 + 2y
# average (+ (square (/ x guess)) (* 2 guess))
(define (improve guess x) (average guess (/ x guess)))
to
(define (improve guess x) (average (/ x (square guess)) (* 2 guess)))
Changes to good-enough?:
(< (abs (- (square guess) x)) 0.001)
to
(< (abs (- (cube guess) x)) 0.001)
Gotcha's
--------------
D'oh
(define (improve guess x) (average (/ x (square guess)) (* 2 guess)))
was
(define (improve guess x) (average (square (/ x guess)) (* 2 guess)))