Pseudo-random numbers/Middle-square method: Difference between revisions

Content added Content deleted
(add OCaml)
(simplify)
Line 645: Line 645:
=={{header|OCaml}}==
=={{header|OCaml}}==
<syntaxhighlight lang="ocaml">let random_seq seed =
<syntaxhighlight lang="ocaml">let random_seq seed =
let next x = x * x / 1_000 mod 1_000_000 in
let next x = x * x / 1000 mod 1000_000 in
Seq.iterate next (next seed)
Seq.iterate next (next seed)


(* test code *)
(* test *)
let () =
let () =
random_seq 675248 |> Seq.take 5 |> Seq.iter (Printf.printf " %u")</syntaxhighlight>
let print_first5 sq =
sq |> Seq.take 5 |> Seq.map string_of_int
|> List.of_seq |> String.concat " " |> print_endline
in
print_first5 (random_seq 675248)</syntaxhighlight>
{{out}}
{{out}}
<pre>959861 333139 981593 524817 432883</pre>
<pre> 959861 333139 981593 524817 432883</pre>


=={{header|Perl}}==
=={{header|Perl}}==
Line 718: Line 714:
def random():
def random():
global seed
global seed
s = str(seed ** 2)
seed = int(str(seed ** 2).zfill(12)[3:9])
while len(s) != 12:
s = "0" + s
seed = int(s[3:9])
return seed
return seed
for i in range(0,5):
for _ in range(5):
print(random())
print(random())
</syntaxhighlight>
</syntaxhighlight>