RosettaCodeData/Task/Monte-Carlo-methods/Haskell/monte-carlo-methods.hs
2015-02-20 00:35:01 -05:00

11 lines
451 B
Haskell

import System.Random
import Control.Monad
get_pi throws = do results <- replicateM throws one_trial
return (4 * fromIntegral (foldl (+) 0 results) / fromIntegral throws)
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)