Skip to content

Commit 9ca59fc

Browse files
committed
Clean up Monte Carlo integration in Racket
1 parent cee1270 commit 9ca59fc

File tree

2 files changed

+22
-19
lines changed

2 files changed

+22
-19
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,25 @@
1-
#lang racket
2-
(define (in_circle x y)
3-
(< (+ (sqr x) (sqr y)) 1)
4-
)
1+
#lang racket/base
52

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)
813
(if (= n 0)
914
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))
2120

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))))

contents/monte_carlo_integration/monte_carlo_integration.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ each point is tested to see whether it's in the circle or not:
8080
{% sample lang="lua" %}
8181
[import:2-4, lang="lua"](code/lua/monte_carlo.lua)
8282
{% 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)
8484
{% sample lang="scala" %}
8585
[import:3-3, lang:"scala"](code/scala/monte_carlo.scala)
8686
{% sample lang="lisp" %}

0 commit comments

Comments
 (0)