36 lines
770 B
Plaintext
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)
|