The PRNG table is amazing—that must have been really a lot of work!
One thing that these days concerns me is that nobody is writing strong tests for collisions. People see that PRNGs with 64 bits of state like WyRand pass PractRand at 32TB and obviously they fail collisions tests using much less data.
It seems to me that people stopped considering collisions as a problem. They were a difficult problem with LCGs 50 years ago. Once we had better multipliers, larger states, etc., collisions were ok. So modern test suites like PractRand and SmokeRand are focused on bit patterns, and ignore the problem. The result is that we have quite bad generators with 64 bits of state that "pass PractRand at 32TB" or such statement—and if you mix a bit randomly the bits combining logical and arithmetical operations, really, it is not difficult to pass PractRand, even with 64 bits of state.
I think it would be interesting to have back at least some level of collision testing in libraries like PractRand and SmokeRand, just to weed out generators with a state space that's too small.
What do you think?
The PRNG table is amazing—that must have been really a lot of work!
One thing that these days concerns me is that nobody is writing strong tests for collisions. People see that PRNGs with 64 bits of state like WyRand pass PractRand at 32TB and obviously they fail collisions tests using much less data.
It seems to me that people stopped considering collisions as a problem. They were a difficult problem with LCGs 50 years ago. Once we had better multipliers, larger states, etc., collisions were ok. So modern test suites like PractRand and SmokeRand are focused on bit patterns, and ignore the problem. The result is that we have quite bad generators with 64 bits of state that "pass PractRand at 32TB" or such statement—and if you mix a bit randomly the bits combining logical and arithmetical operations, really, it is not difficult to pass PractRand, even with 64 bits of state.
I think it would be interesting to have back at least some level of collision testing in libraries like PractRand and SmokeRand, just to weed out generators with a state space that's too small.
What do you think?