Monte Carlo methods: Difference between revisions

Content added Content deleted
Line 1,298: Line 1,298:
<lang haskell>import Control.Monad (foldM, (>=>))
<lang haskell>import Control.Monad (foldM, (>=>))
import System.Random (randomRIO)
import System.Random (randomRIO)

------- APPROXIMATION TO PI BY A MONTE CARLO METHOD ------


monteCarloPi :: Int -> IO Double
monteCarloPi :: Int -> IO Double
Line 1,305: Line 1,307:
where
where
rnd = randomRIO (0, 1) :: IO Double
rnd = randomRIO (0, 1) :: IO Double
go a x = rnd >>= (\rx -> rnd >>= (pure . flip (f rx) a))
f x y
f x y
| 1 > x ** 2 + y ** 2 = succ
| 1 > x ** 2 + y ** 2 = succ
| otherwise = id
| otherwise = id


--------------------------- TEST -------------------------
go a x =
rnd >>= (\rx -> rnd >>= (pure . flip (f rx) a))

main :: IO ()
main :: IO ()
main =
main =