estimating pi


Estimate pi.

 $ cat pa.rkt 
 #lang racket 
  
 (define (estimate-pi n) 
  
   ; Return the approximation to pi generated after the given number of 
   ; iterations. 
  
  
   (define (pick-rp-pair) 
  
     ; Return 1 if two random positive integers are relatively prime, 0 
     ; otherwise. 
  
     (if (= 1 (gcd (rnd) (rnd))) 1 0)) 
  
  
   (define (rnd) 
  
    ; Return a random integer in [1..1000000]. 
  
    (random 1 1000001)) 
  
  
   (let loop ((iters n) (rp-pairs 0)) 
     (if (< iters 1) 
       (sqrt (/ 6 (/ rp-pairs n))) 
       (loop (- iters 1) (+ rp-pairs (pick-rp-pair)))))) 
  
 (estimate-pi 1000000) 
  
 $ racket pa.rkt 
 3.143152142598388 
  
 $