20 lines
550 B
Forth
20 lines
550 B
Forth
|
|
let print x = printfn "%A" x
|
||
|
|
|
||
|
|
let MonteCarloPiGreco niter =
|
||
|
|
let eng = System.Random()
|
||
|
|
let action () =
|
||
|
|
let x: float = eng.NextDouble()
|
||
|
|
let y: float = eng.NextDouble()
|
||
|
|
let res: float = System.Math.Sqrt(x**2.0 + y**2.0)
|
||
|
|
if res < 1.0 then
|
||
|
|
1
|
||
|
|
else
|
||
|
|
0
|
||
|
|
let res = [ for x in 1..niter do yield action() ]
|
||
|
|
let tmp: float = float(List.reduce (+) res) / float(res.Length)
|
||
|
|
4.0*tmp
|
||
|
|
|
||
|
|
MonteCarloPiGreco 1000 |> print
|
||
|
|
MonteCarloPiGreco 10000 |> print
|
||
|
|
MonteCarloPiGreco 100000 |> print
|