Monte Carlo methods: Difference between revisions

m
Line 1,297:
 
<lang haskell>import Control.Monad (foldM, (>=>))
import Data.Functor ((<&>))
import System.Random (randomRIO)
 
Line 1,304 ⟶ 1,303:
monteCarloPi :: Int -> IO Double
monteCarloPi n =
(/ fromIntegral n) . (4 *) . fromIntegral
foldM go 0 [1 .. n]
<&$> ((/foldM fromIntegralgo n)0 . (4 *)[1 .. fromIntegral)n]
where
rnd = randomRIO (0, 1) :: IO Double
go a _ = rnd >>= (\rx -> rnd <&> flip (f rx) a <$> rnd)
f x y
| 1 > x ** 2 + y ** 2 = succ
9,659

edits