Section: 29.5.4.3 [rand.eng.mers] Status: CD1 Submitter: Stephan Tolksdorf Opened: 2007-09-21 Last modified: 2016-01-28
Priority: Not Prioritized
View all other issues in [rand.eng.mers].
View all issues with CD1 status.
Discussion:
The mersenne_twister_engine
is required to use a seeding method that is given
as an algorithm parameterized over the number of bits W
. I doubt whether the given generalization
of an algorithm that was originally developed only for unsigned 32-bit integers is appropriate
for other bit widths. For instance, W
could be theoretically 16 and UIntType
a 16-bit integer, in
which case the given multiplier would not fit into the UIntType
. Moreover, T. Nishimura and M.
Matsumoto have chosen a dif ferent multiplier for their 64 bit Mersenne Twister
[reference].
I see two possible resolutions:
W
of the mersenne_twister_template
to values of 32 or 64 and use the
multiplier from [the above reference] for the 64-bit case (my preference)W
as a 32-bit array of appropriate length (and a specified byte
order) and always employ the 32-bit algorithm for seeding
See N2424 for further discussion.
[ Bellevue: ]
Stephan Tolksdorf has additional comments on N2424. He comments: "there is a typo in the required behaviour for mt19937_64: It should be the 10000th (not 100000th) invocation whose value is given, and the value should be 9981545732273789042 (not 14002232017267485025)." These values need checking.
Take the proposed recommendation in N2424 and move to REVIEW.
Proposed resolution:
See N2424 for the proposed resolution.
[ Stephan Tolksdorf adds pre-Bellevue: ]
I support the proposed resolution in N2424, but there is a typo in the required behaviour for
mt19937_64
: It should be the 10000th (not 100000th) invocation whose value is given, and the value should be 9981545732273789042 (not 14002232017267485025). The change to para. 8 proposed by Charles Karney should also be included in the proposed wording.
[ Sophia Antipolis: ]
Note the main part of the issue is resolved by N2424.