天天看點

蒙特·卡羅方法 計算圓周率

; 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
           

繼續閱讀