From 939b74fffcad0463b5906581608e55cadce977a0 Mon Sep 17 00:00:00 2001 From: binarydinosaur252 Date: Sat, 18 Aug 2018 17:28:08 -0400 Subject: [PATCH] implemented monte carlo integration in nim --- .../code/nim/monte_carlo.nim | 27 +++++++++++++++++++ .../monte_carlo_integration.md | 5 ++++ 2 files changed, 32 insertions(+) create mode 100644 contents/monte_carlo_integration/code/nim/monte_carlo.nim diff --git a/contents/monte_carlo_integration/code/nim/monte_carlo.nim b/contents/monte_carlo_integration/code/nim/monte_carlo.nim new file mode 100644 index 000000000..7d2d91197 --- /dev/null +++ b/contents/monte_carlo_integration/code/nim/monte_carlo.nim @@ -0,0 +1,27 @@ +import random +import math + +randomize() + +proc in_circle(x,y,radius: float): bool = + return x * x + y * y < radius * radius + +proc monte_carlo(samples: int): float = + const radius: float = 1 + var count: int = 0 + + for i in 0 .. < samples: + var + x: float = random(radius) + y: float = random(radius) + + if in_circle(x,y,radius): + count += 1 + + var pi_estimate: float = 4 * count / samples + return pi_estimate + +let estimate: float = monte_carlo(1000000) + +echo "the estimate of pi is ", estimate +echo "percent error: ", 100 * (abs(estimate - PI)/PI) \ No newline at end of file diff --git a/contents/monte_carlo_integration/monte_carlo_integration.md b/contents/monte_carlo_integration/monte_carlo_integration.md index e9ba577b5..55fadf9c6 100644 --- a/contents/monte_carlo_integration/monte_carlo_integration.md +++ b/contents/monte_carlo_integration/monte_carlo_integration.md @@ -65,6 +65,8 @@ each point is tested to see whether it's in the circle or not: [import:5-7, lang:"python"](code/python/monte_carlo.py) {% sample lang="cs" %} [import:23-23, lang:"csharp"](code/csharp/Circle.cs) +{% sample lang="nim" %} +[import:6-7, lang:"nim"](code/nim/monte_carlo.nim) {% endmethod %} If it's in the circle, we increase an internal count by one, and in the end, @@ -129,9 +131,12 @@ Feel free to submit your version via pull request, and thanks for reading! [import, lang:"csharp"](code/csharp/Circle.cs) ##### Program.cs [import, lang:"csharp"](code/csharp/Program.cs) +{% sample lang="nim" %} +[import, lang:"nim"](code/nim/monte_carlo.nim) {% endmethod %} +