File tree 2 files changed +22
-19
lines changed
contents/monte_carlo_integration
2 files changed +22
-19
lines changed Original file line number Diff line number Diff line change 1
- #lang racket
2
- (define (in_circle x y)
3
- (< (+ (sqr x) (sqr y)) 1 )
4
- )
1
+ #lang racket/base
5
2
6
- (define (monte_carlo_pi n)
7
- (* (/ (local ((define (monte_carlo* n count)
3
+ (require racket/local)
4
+ (require racket/math)
5
+
6
+ (define (in-circle x y)
7
+ "Checks if a point is in a unit circle "
8
+ (< (+ (sqr x) (sqr y)) 1 ))
9
+
10
+ (define (monte-carlo-pi n)
11
+ "Returns an approximation of pi "
12
+ (* (/ (local ((define (monte-carlo-pi* n count)
8
13
(if (= n 0 )
9
14
count
10
- (monte_carlo_pi* (sub1 n)
11
- (if (in_circle (random) (random))
12
- (add1 count)
13
- count
14
- )
15
- )
16
- )
17
- )) (monte_carlo_pi* n 0 )
18
- ) n) 4 )
19
- )
20
-
15
+ (monte-carlo-pi* (sub1 n)
16
+ (if (in-circle (random) (random))
17
+ (add1 count)
18
+ count)))))
19
+ (monte-carlo-pi* n 0 )) n) 4 ))
21
20
22
- (display (monte_carlo_pi 1000 ))
21
+ (define nsamples 5000000 )
22
+ (define pi-estimate (monte-carlo-pi nsamples))
23
+ (displayln (string-append "Estimate (rational): " (number->string pi-estimate)))
24
+ (displayln (string-append "Estimate (float): " (number->string (real->single-flonum pi-estimate))))
25
+ (displayln (string-append "Error: " (number->string (* (/ (abs (- pi-estimate pi)) pi) 100 ))))
Original file line number Diff line number Diff line change @@ -80,7 +80,7 @@ each point is tested to see whether it's in the circle or not:
80
80
{% sample lang="lua" %}
81
81
[ import:2-4, lang="lua"] ( code/lua/monte_carlo.lua )
82
82
{% sample lang="racket" %}
83
- [ import:2-4 , lang:"lisp"] ( code/racket/monte_carlo.rkt )
83
+ [ import:6-8 , lang:"lisp"] ( code/racket/monte_carlo.rkt )
84
84
{% sample lang="scala" %}
85
85
[ import:3-3, lang:"scala"] ( code/scala/monte_carlo.scala )
86
86
{% sample lang="lisp" %}
You can’t perform that action at this time.
0 commit comments