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

21 lines
563 B
Erlang

-module(lcg).
-export([bsd_seed/1, ms_seed/1, bsd_rand/0, ms_rand/0]).
bsd_seed(Seed) -> put(bsd_state, Seed).
ms_seed(Seed) -> put(ms_state, Seed).
bsd_rand() ->
State = (get(bsd_state) * 1103515245 + 12345) rem 2147483648,
put(bsd_state,State),
State.
ms_rand() ->
State = (get(ms_state) * 214013 + 2531011) rem 2147483648,
put(ms_state,State),
State div 65536.
main(_) ->
bsd_seed(0),
ms_seed(0),
io:fwrite("~10s~c~5s~n", ["BSD", 9, "MS"]),
lists:map(fun(_) -> io:fwrite("~10w~c~5w~n", [bsd_rand(),9,ms_rand()]) end, lists:seq(1,10)).