RosettaCodeData/Task/Linear-congruential-generator/Elixir/linear-congruential-generat...

36 lines
770 B
Plaintext

defmodule LCG do
def ms_seed(seed) do
Process.put(:ms_state, seed)
ms_rand
Process.put(:ms_seed, seed)
end
def ms_rand do
state = Process.get(:ms_state)
state2 = rem(214013 * state + 2531011, 2147483648)
Process.put(:ms_state, state2)
div(state, 65536)
end
def bsd_seed(seed) do
Process.put(:bsd_state, seed)
Process.put(:bsd_seed, seed)
end
def bsd_rand do
state = Process.get(:bsd_state)
state2 = rem(1103515245 * state + 12345, 2147483648)
Process.put(:bsd_state, state2)
state2
end
end
Enum.each([0,1], fn i ->
IO.puts "\nRandom seed: #{i}\n BSD MS"
LCG.bsd_seed(i)
LCG.ms_seed(i)
Enum.each(1..10, fn _ ->
:io.format "~11w~8w~n", [LCG.bsd_rand, LCG.ms_rand]
end)
end)