123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- (use-modules
- (ice-9 futures)
- ;; SRFI 19 for time related procedures
- (srfi srfi-19))
- ;; Just defining a timing macro here to conveniently measure elapsed time of
- ;; evaluating expressions.
- (define-syntax time
- (syntax-rules ()
- [(time expr expr* ...)
- (begin
- (define start-time (current-time time-monotonic))
- expr
- expr* ...
- (define end-time (current-time time-monotonic))
- (let* ([diff (time-difference end-time start-time)]
- [elapsed-ns (+ (/ (time-nanosecond diff) 1e9)
- (time-second diff))])
- (display (format #t "~fs~%" elapsed-ns))))]))
- (define (mandelbrot iterations x y n)
- (let ([ci (- (/ (* 2.0 y) n) 1.0)]
- [cr (- (/ (* 2.0 x) n) 1.5)])
- (let loop ([i 0] [zr 0.0] [zi 0.0])
- (if (> i iterations)
- i
- (let ([zrq (* zr zr)]
- [ziq (* zi zi)])
- (cond
- [(> (+ zrq ziq) 4.0) i]
- [else (loop (+ i 1)
- (+ (- zrq ziq) cr)
- (+ (* 2.0 zr zi) ci))]))))))
- (time
- (let ([f (future (lambda () (mandelbrot 10000000 62 501 1000)))])
- (list (mandelbrot 10000000 62 500 1000)
- (touch f))))
- (time
- (mandelbrot 10000000 62 501 1000))
|