RosettaCodeData/Task/Linear-congruential-generator/OCaml/linear-congruential-generator.ocaml
2023-07-01 13:44:08 -04:00

19 lines
464 B
Text

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]