; 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