問題3.5 – SICP(計算機プログラムの構造と解釈)その107
2009年02月21日
問題3.5
(use srfi-27) ;; for random-integer (define (random-in-range low high) (let ((range (- high low))) (+ low (random-integer range)))) (define (monte-carlo trails experiment) (define (iter trails-remainding trails-passed) (cond ((= trails-remainding 0) (/ trails-passed trails)) ((experiment) (iter (- trails-remainding 1) (+ trails-passed 1))) (else (iter (- trails-remainding 1) trails-passed)))) (iter trails 0)) (define (estimate-integral p x1 x2 y1 y2 trails) (* (monte-carlo trails (lambda () (p (random-in-range x1 x2) (random-in-range y1 y2)))) (* (- x2 x1) (- y2 y1)))) ;; 面積と面積から算出した円周率piを表示する手続き (define (pi-from-monte-carlo-simulation circle-area radius) (display circle-area) (newline) (/ circle-area radius)) ;; 中心(5, 7) 半径3 の円の場合 ;テスト手続き (define (p-test x y) (<= (+ (square (- x 5)) (square (- y 7))) (square 3))) ;結果 (pi-from-monte-carlo-simulation (estimate-integral p-test 2 8 4 10 100000.0) (square 3)) gosh> 26.953920000000004 2.99488 (pi-from-monte-carlo-simulation (estimate-integral p-test 2 8 4 10 100000.0) (square 3)) gosh> 27.084960000000002 3.00944 (pi-from-monte-carlo-simulation (estimate-integral p-test 2 8 4 10 100000.0) (square 3)) gosh> 27.01404 3.00156 ;; 中心(5, 5) 半径5 の円の場合 ;テスト手続き (define (p-test x y) (<= (+ (square (- x 5)) (square (- y 5))) (square 5))) ; 結果 (pi-from-monte-carlo-simulation (estimate-integral p-test 0 10 0 10 100000.0) (square 5)) gosh> 79.061 3.16244 (pi-from-monte-carlo-simulation (estimate-integral p-test 0 10 0 10 100000.0) (square 5)) gosh> 79.187 3.16748 (pi-from-monte-carlo-simulation (estimate-integral p-test 0 10 0 10 100000.0) (square 5)) gosh> 79.06 3.1624
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542