37 lines
1 KiB
Text
37 lines
1 KiB
Text
go2 =>
|
|
|
|
% BSD
|
|
lcg_init(bsd,1103515245,12345,2**31,1),
|
|
println([lcg(bsd) : _ in 1..10]),
|
|
|
|
lcg_init(bsd,1,1103515245,12345,2**31,1),
|
|
println([lcg(bsd) : _ in 1..10]),
|
|
|
|
% MS
|
|
lcg_init(ms,214013,2531011,2**31,2**16),
|
|
println([lcg(ms) : _ in 1..10]),
|
|
|
|
lcg_init(ms,1,214013,2531011,2**31,2**16),
|
|
println([lcg(ms) : _ in 1..10]),
|
|
|
|
% unknown (-> error)
|
|
println([lcg(unknown) : _ in 1..10]),
|
|
|
|
nl.
|
|
|
|
% default seed is 0
|
|
lcg_init(Type,Multiplier,Adder,Mod,OutputDivisor) =>
|
|
lcg_init(Type,0,Multiplier,Adder,Mod,OutputDivisor).
|
|
|
|
lcg_init(Type,Seed,Multiplier,Adder,Mod,OutputDivisor) =>
|
|
get_global_map().put(Type,
|
|
new_map([seed=Seed,multiplier=Multiplier,adder=Adder,mod=Mod,outputDivisor=OutputDivisor])).
|
|
|
|
lcg(Type) = Rand div M.get(outputDivisor) =>
|
|
if not get_global_map().has_key(Type) then
|
|
throw $lcg(Type,unknown_LCG_type)
|
|
end,
|
|
M = get_global_map().get(Type),
|
|
Rand = ((M.get(multiplier)*M.get(seed) + M.get(adder)) mod M.get(mod)),
|
|
M.put(seed,Rand),
|
|
get_global_map().put(Type,M).
|