-
Notifications
You must be signed in to change notification settings - Fork 0
/
ex_1_007.scm
32 lines (23 loc) · 1.13 KB
/
ex_1_007.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
(require rackunit)
(define tolerance 0.00000001)
(define (sqrt-iter guess x)
(define (improve-iter prev-guess cur-guess)
(if (good-enough? prev-guess cur-guess)
cur-guess
(improve-iter cur-guess
(improve-guess cur-guess x))))
(improve-iter guess (improve-guess guess x)))
(define (improve-guess prev-guess cur-guess)
(average prev-guess (/ cur-guess prev-guess)))
(define (average x y)
(/ (+ x y) 2))
(define (good-enough? guess x)
(< (abs (/ (- guess x) guess)) tolerance))
(define (sqrt x)
(sqrt-iter 1.0 x))
(check-= (sqrt 10000000000000000) 100000000 tolerance)
(check-= (sqrt 0.0001) 0.01 tolerance)
(check-= (sqrt 10000) 100 tolerance)
;в данной случае мы ориентируемся на величину изменения приближения.
;Это дает лучший результет,при больших числах, чем если бы мы возводили приближение в квадрат и сравнивали с исходным числом,
;т.к. при работе с вещественными числами теряется точность