/
1-1-7.scm
executable file
·90 lines (71 loc) · 1.6 KB
/
1-1-7.scm
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
81
82
83
84
85
86
87
88
89
; SECTION 1.1.7
(define square sqr) ; Squaring function
; Ex 1.6.
; Defining (if) using (cond)
; Ex 1.7.
; Deciding a sufficient answer for square root
(define (average x y)
(/ (+ x y) 2)
)
(define (improve guess x)
(average guess (/ x guess))
)
(define (good-enough? guess x)
(< (abs (- (square guess) x)) 0.001)
)
(define (sqrt-iter guess x)
(if (good-enough? guess x)
guess (sqrt-iter (improve guess x)
x
)
)
)
(define (sqrt-old x) (sqrt-iter 1.0 x))
; define new functions
; One should be called (sqrt-new)
; Testing square roots
; (sqrt) is the built-in procedure
; Small numbers
(sqrt-old 3)
(sqrt-new 3)
(sqrt 3)
(newline)
(sqrt-old 0.00101)
(sqrt-new 0.00101)
(sqrt 0.00101)
(newline)
(sqrt-old 0.001)
(sqrt-new 0.001)
(sqrt 0.001)
(newline)
(sqrt-old 0.00099)
(sqrt-new 0.00099)
(sqrt 0.00099)
(newline)
(sqrt-old 0.000005)
(sqrt-new 0.000005)
(sqrt 0.000005)
(newline)
; Large numbers
(sqrt-old 9e16)
(sqrt-new 9e16) ; Compare this value to sqrt-old
(sqrt 9e16)
(newline)
;(sqrt-old 1e140) ; very likely fails to find an answer
(sqrt-new 1e140)
(sqrt 1e140)
(newline)
; Ex 1.8.
; Using Newton-Raphson to get the cube root
; Tests for cube root
; Most answers will not be exact
; since these are floating-point values
(<?procedure-name?> 8) ; 2
(<?procedure-name?> 20.08) ; 2.7180320...
(<?procedure-name?> 0) ; 0
(<?procedure-name?> 1) ; 1.0
(<?procedure-name?> 1.001) ; 1.00033322...
(<?procedure-name?> -216) ; -6
(<?procedure-name?> 0.000008) ; 0.02
(<?procedure-name?> 1e9) ; 1000
(<?procedure-name?> 64e180) ; 4e60