Subtractive generator: Difference between revisions
Content added Content deleted
Line 1,181: | Line 1,181: | ||
var r: set[int16] |
var r: set[int16] |
||
for n in 0..<I: |
for n in 0..<I: |
||
r.incl |
r.incl s[n.shfl] |
||
r == x |
r == x |
||
Line 1,189: | Line 1,189: | ||
template next(state): untyped = |
template next(state): untyped = |
||
state.addLast |
state.addLast (state[^I]-state[^J]) % M |
||
discard state.popFirst() |
discard state.popFirst() |
||
Line 1,198: | Line 1,198: | ||
#reorder and put into ring buffer |
#reorder and put into ring buffer |
||
for i in 0..<I: |
for i in 0..<I: |
||
result.addLast |
result.addLast s[i.shfl] |
||
#cycle through the next 165 values |
#cycle through the next 165 values |
||
for _ in 0..<3*I: |
for _ in 0..<3*I: |
||
Line 1,214: | Line 1,214: | ||
result = proc(): int = |
result = proc(): int = |
||
r.next |
r.next |
||
r.peekLast |
|||
let subGen* = initSubGen[55, 24, 34, 1e9.int] |
let subGen* = initSubGen[55, 24, 34, 1e9.int] |