RosettaCodeData/Task/Monte-Carlo-methods/Haskell/monte-carlo-methods.hs

12 lines
451 B
Haskell
Raw Permalink Normal View History

2013-04-10 21:29:02 -07:00
import System.Random
import Control.Monad
get_pi throws = do results <- replicateM throws one_trial
2015-02-20 00:35:01 -05:00
return (4 * fromIntegral (foldl (+) 0 results) / fromIntegral throws)
2013-04-10 21:29:02 -07:00
where
one_trial = do rand_x <- randomRIO (-1, 1)
rand_y <- randomRIO (-1, 1)
let dist :: Double
dist = sqrt (rand_x*rand_x + rand_y*rand_y)
return (if dist < 1 then 1 else 0)