home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / elk-2_0.lha / elk-2.0 / examples / scheme / meissel < prev    next >
Encoding:
Text File  |  1992-10-09  |  809 b   |  32 lines

  1. ;;; -*-Scheme-*-
  2.  
  3. (define (partial-sum i n e ee base)
  4.   (- (quotient base (* i e))
  5.      (quotient base (* (+ 2 i) ee))))
  6.  
  7. (define (a n base)             ; atan(1/n)
  8.   (do ((i 1 (+ 4 i))
  9.        (delta 1 (partial-sum i n e (* e n n) base))
  10.        (e n (* e n n n n))
  11.        (sum 0 (+ sum delta)))
  12.       ((zero? delta) sum)))
  13.  
  14. (define (calc-pi base)
  15.   (- (* 32 (a  10 base))
  16.      (* 16 (a 515 base))
  17.      (*  4 (a 239 base))))
  18.  
  19. (define (run)
  20.   (format #t "How many digits of pi do you want (0 to exit): ")
  21.   (let ((num (read)))
  22.     (if (and (not (eof-object? num)) (positive? num))
  23.     (let* ((extra (+ 5 (truncate (log num))))
  24.            (base (expt 10 (+ num extra)))
  25.            (pi (calc-pi base)))
  26.       (format #t "~a.~a~%"
  27.           (quotient pi base)
  28.           (quotient (remainder pi base) (expt 10 extra)))
  29.       (run)))))
  30.  
  31. (run)
  32.