#light open System //random number generator with 6 numbers let ran = new Random() let random5() = ran.Next(5) //naive let rantbl = [| 0 .. 6 |] let rec random7() = let i,j = random5(), random5() let sum = i + j if sum < rantbl.Length then randomTable.[sum] else random7() let randomTable = [|for i in 0 .. 24 do if i / 7<3 then yield i % 7 else yield -1 |] let rec random7_2() = let i,j = random5(), random5() let index = i * 5 + j if randomTable.[index] <> -1 then randomTable.[index] else random7_2() let sampler sample = seq { for i in 0 .. 100000 do yield sample() } let variance sample N = let mean = sample |> Seq.average_by (fun i-> float i) (sample |> Seq.sum_by (fun i->(float i - mean) * (float i - mean) )) / N let standardDeviation varian= sqrt (varian) let standardError sample = let N = float (Seq.length sample) let vari = variance sample N let stDev = standardDeviation vari stDev / (sqrt N) let sample = sampler random7 standardError(sampler random7 ) standardError (sampler random7_2) // uniform distribution let errorSet mySet = let N = Seq.length mySet |> float mySet |> Seq.count_by (fun e-> e) |> Seq.map (fun (i,j) -> i, (float j)/N * 100.0) |> Map.of_seq errorSet (sampler random7) errorSet (sampler random7_2) print5 random7()