23 lines
632 B
Text
23 lines
632 B
Text
import <Utilities/Random.sl>;
|
|
import <Utilities/Conversion.sl>;
|
|
|
|
main(args(2)) := monteCarlo(stringToInt(args[1]), stringToInt(args[2]));
|
|
|
|
monteCarlo(n, seed) :=
|
|
let
|
|
totalHits := monteCarloHelper(n, seedRandom(seed), 0);
|
|
in
|
|
(totalHits / intToFloat(n))*4.0;
|
|
|
|
monteCarloHelper(n, generator, result) :=
|
|
let
|
|
xRand := getRandom(generator);
|
|
x := xRand.Value/(generator.RandomMax + 1.0);
|
|
yRand := getRandom(xRand.Generator);
|
|
y := yRand.Value/(generator.RandomMax + 1.0);
|
|
|
|
newResult := result + 1 when x^2 + y^2 < 1.0 else
|
|
result;
|
|
in
|
|
result when n < 0 else
|
|
monteCarloHelper(n - 1, yRand.Generator, newResult);
|