Subtractive generator: Difference between revisions

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