Update all new Tasks
This commit is contained in:
parent
00a190b0a6
commit
91df62d461
5697 changed files with 93386 additions and 804 deletions
|
|
@ -0,0 +1,28 @@
|
|||
import Control.Monad.Random
|
||||
import Control.Applicative
|
||||
import Text.Printf
|
||||
import Control.Monad
|
||||
import Data.Bits
|
||||
|
||||
data OneRun = OutRun | InRun deriving (Eq, Show)
|
||||
|
||||
randomList :: Int -> Double -> Rand StdGen [Int]
|
||||
randomList n p = take n . map f <$> getRandomRs (0,1)
|
||||
where f n = if (n > p) then 0 else 1
|
||||
|
||||
countRuns xs = fromIntegral . sum $
|
||||
zipWith (\x y -> x .&. xor y 1) xs (tail xs ++ [0])
|
||||
|
||||
calcK :: Int -> Double -> Rand StdGen Double
|
||||
calcK n p = (/ fromIntegral n) . countRuns <$> randomList n p
|
||||
|
||||
printKs :: StdGen -> Double -> IO ()
|
||||
printKs g p = do
|
||||
printf "p= %.1f, K(p)= %.3f\n" p (p * (1 - p))
|
||||
forM_ [1..5] $ \n -> do
|
||||
let est = evalRand (calcK (10^n) p) g
|
||||
printf "n=%7d, estimated K(p)= %5.3f\n" (10^n::Int) est
|
||||
|
||||
main = do
|
||||
x <- newStdGen
|
||||
forM_ [0.1,0.3,0.5,0.7,0.9] $ printKs x
|
||||
Loading…
Add table
Add a link
Reference in a new issue