average-damp-square-root.rkt 827 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. #lang racket
  2. (define (Mb-to-B n) (* n 1024 1024))
  3. (define MAX-BYTES (Mb-to-B 64))
  4. (custodian-limit-memory (current-custodian) MAX-BYTES)
  5. (define (square x) (* x x))
  6. (define (average a b) (/ (+ a b) 2))
  7. (define (average-damp f)
  8. (lambda (x) (average x (f x))))
  9. (define tolerance 0.0000000001)
  10. (define (fixed-point f guess)
  11. (define (close-enough? value1 value2)
  12. (< (abs (- value1 value2)) tolerance))
  13. (define (try current-guess)
  14. ; (display current-guess) (newline)
  15. (let
  16. ((next (f current-guess)))
  17. (if
  18. (close-enough? current-guess next)
  19. next
  20. (try next))))
  21. (try guess))
  22. (define (sqrt x)
  23. (fixed-point
  24. (average-damp (lambda (y) (/ x y)))
  25. 1.0))
  26. (display "average damp square: ") (newline)
  27. (time ((average-damp square) 10))
  28. (newline)
  29. (display "square root: ") (newline)
  30. (time (sqrt 81))
  31. (newline)