Monte Carlo methods: Difference between revisions

Content added Content deleted
(→‎{{header|Haskell}}: Applied Ormolu to older version, and replaced its 'foldl (+) 0' with sum)
Line 1,300: Line 1,300:


monteCarloPi :: Int -> IO Double
monteCarloPi :: Int -> IO Double
monteCarloPi n = do
monteCarloPi n =
m <- foldM go 0 [1 .. n]
foldM go 0 [1 .. n]
return (4 * fromIntegral m / fromIntegral n)
>>= (pure . (/ fromIntegral n) . (4 *) . fromIntegral)
where
where
rnd = randomRIO (0, 1) :: IO Double
rnd = randomRIO (0, 1) :: IO Double
Line 1,308: Line 1,308:
| 1 > x ** 2 + y ** 2 = succ
| 1 > x ** 2 + y ** 2 = succ
| otherwise = id
| otherwise = id

go a x = do
rx <- rnd
go a x =
ry <- rnd
rnd >>= (\rx -> rnd >>= (pure . flip (f rx) a))
return $ f rx ry a


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