Ensure mixmax rng is not initialized with all zeros #3287
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Submission Checklist
./runTests.py src/test/unit
make cpplint
Summary
Prevents the poor behavior seen in #3285.
The boost::mixmax rng is actually initialized with 128 bits of state. The overload we were previously calling was synonymous with
rng(0,0, 0, seed+chain)
. This PR changes torng(0,1,seed,chain)
. In addition to ensuring that the full 128 bits are never all zero, it also makes adjacent seeds more independent; previously seed=1 chain=1, seed=2 chain=0, and seed=0 chain=2 would all yield the same seeding.I am still awaiting on confirmation from the boost devs that this configuration of the RNG preserves the desirable property that
chain
andchain+1
yield independent streams, hence the draft status.Intended Effect
Closes #3285
How to Verify
See the updated godbolt which shows that the single
1
prevents the deterministic behaviorSide Effects
Seeds will be different from 2.35RC1. This also required updating the tests which are seed-dependent.
Documentation
None
Copyright and Licensing
Please list the copyright holder for the work you are submitting (this will be you or your assignee, such as a university or company):
Simons Foundation
By submitting this pull request, the copyright holder is agreeing to license the submitted work under the following licenses: