19 lines
464 B
OCaml
19 lines
464 B
OCaml
let lcg31 a c x =
|
|
(a * x + c) land 0x7fffffff
|
|
|
|
let rng_seq rng seed =
|
|
Seq.iterate rng (rng seed)
|
|
|
|
let lcg_bsd =
|
|
rng_seq (lcg31 1103515245 12345)
|
|
|
|
let lcg_ms seed =
|
|
Seq.map (fun r -> r lsr 16) (rng_seq (lcg31 214013 2531011) seed)
|
|
|
|
(* test code *)
|
|
let () =
|
|
let print_first8 sq =
|
|
sq |> Seq.take 8 |> Seq.map string_of_int
|
|
|> List.of_seq |> String.concat " " |> print_endline
|
|
in
|
|
List.iter print_first8 [lcg_bsd 0; lcg_bsd 1; lcg_ms 0; lcg_ms 1]
|