Guest User

Untitled

a guest
May 21st, 2013
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import System.Random
  2. import Control.Monad (forM)
  3. import Text.Printf (printf)
  4.  
  5. gamma  = 0.98
  6. tGamma = 2.326
  7.  
  8. a      = 7
  9. k      = 6
  10. c      = 6.85
  11.  
  12. fk x = log (1 + a * x)
  13. f x  = if ((sum (fmap fk x)) <= c) then 1.0 else 0.0
  14.  
  15. mc :: [a] -> (a -> Double) -> Double
  16. mc lst func = sum (fmap func lst) / fromIntegral (length lst)
  17.  
  18. splitEvery :: Int -> [a] -> [[a]]
  19. splitEvery _ [] = []
  20. splitEvery n ls = (fst sp):(splitEvery n (snd sp)) where
  21.     sp = splitAt n ls
  22.  
  23. countVolume :: Int -> IO ()
  24. countVolume n = do
  25.     putStrLn $ printf "n = %d" n
  26.     let p = mc (take n $ splitEvery k (randoms (mkStdGen 42) :: [Double])) f
  27.     putStrLn $ printf "p_n = %.8f" p
  28.     let d = tGamma * sqrt(p * (1 - p) / fromIntegral n)
  29.     putStrLn $ printf "d_n = %.8f" d
  30.     putStrLn $ printf "Interval = [%.8f, %.8f]" (p - d) (p + d)
  31.  
  32. main = mapM countVolume [10 ^ 4, 10 ^ 6]
Advertisement
Add Comment
Please, Sign In to add comment