円周率モンテカルロ
ついでに円周率を。
pi' = do let t = 100000 nums <- sequence(map sequence (replicate t (replicate 2 randomFIO))) putStrLn $ show $ (fromIntegral(length(filter f nums) )/fromIntegral(t)) * 4 where f :: [Float] -> Bool f = (< 1). sum.map(^2) randomFIO :: IO Float randomFIO = randomIO
実行結果
*Main> pi' 3.13396 *Main> pi' 3.14472 *Main> pi' 3.13884
若干ゆとり教育気味。