蒙特·卡罗方法 计算圆周率

; Monte Carlo method, 蒙特·卡罗方法
; 随机算法 , 计算圆周率Pi
; ================================================================
(define (inCell r)              ;判断点(x,y)是否在半径为r的圆内
  (let ((x (random r))
        (y (random r)))
    (< (+ (* x x) (* y y))
       (* r r))))

(define (zPi r n)               ;n次累计计算Pi
  (let t ((i n) (p 0))
    (if (= i 0)
        (inexact (* 4 (/ p n)))
        (t (- i 1) (+ p (if (inCell r) 1 0))))))

; =================================================================
> (zPi 10.0 100000)
3.13812
> (zPi 10.0 1000000)
3.14134
> (zPi 10.0 10000000)
3.1415824

你可能感兴趣的:(算法)