Monte Carlo methods: Difference between revisions

→‎{{header|Haskell}}: Applied Ormolu to older version, and replaced its 'foldl (+) 0' with sum
(→‎{{header|Haskell}}: Added a variant using foldM and dropping sqrt)
(→‎{{header|Haskell}}: Applied Ormolu to older version, and replaced its 'foldl (+) 0' with sum)
Line 1,272:
 
=={{header|Haskell}}==
<lang haskell>import SystemControl.RandomMonad
import ControlSystem.MonadRandom
 
get_pigetPi throws = do results <- replicateM throws one_trial
results <- replicateM throws one_trial
return (4 * fromIntegral (foldl (+) 0sum results) / fromIntegral throws)
where
one_trial = do rand_x <- randomRIO (-1, 1)
rand_yrand_x <- randomRIO (-1, 1)
rand_y <- randomRIO (-1, 1)
let dist :: Double
dist = sqrt (rand_x*rand_x + rand_y*rand_y)
dist = returnsqrt (if distrand_x <* 1rand_x then+ 1rand_y else* 0rand_y)</lang>
return (if dist < 1 then 1 else 0)</lang>
{{Out}}
<pre>Example:
9,655

edits