This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of NAD status.

799. [tr1] [tr.rand.eng.mers] and [rand.eng.mers]

Section: 99 [tr1::rand.eng.mers], [tr1::tr.rand.eng.mers] Status: NAD Submitter: Stephan Tolksdorf Opened: 2008-02-18 Last modified: 2017-02-03

Priority: Not Prioritized

View all issues with NAD status.

Discussion: [tr1::tr.rand.eng.mers](10) requires that operator== for the mersenne_twister returns true if and only if the states of two mersenne_twisters, consisting each of n integers between 0 and 2w - 1, are completely equal. This is a contradiction with 5.1.1 [tr1::tr.rand.req](3) because the given definition of the state also includes the lower r bits of x(i-n), which will never be used to generate a random number. If two mersenne_twisters only differ in the lower bits of x(i-n) they will not compare equal, although they will produce an identical sequence of random numbers.

99 [tr1::rand.eng.mers] in the latest C++ draft does not specify the behaviour of operator== but uses a similar definition of the state and, just like [tr1::tr.rand.eng.mers], requires the textual representation of a mersenne_twister_engine to consist of Xi-n to Xi-1, including the lower bits of Xi-n. This leads to two problems: First, the unsuspecting implementer is likely to erroneously compare the lower r bits of Xi-n in operator==. Second, if only the lower r bits differ, two mersenne_twister_engines will compare equal (if correctly implemented) but have different textual representations, which conceptually is a bit ugly.

I propose that a paragraph or footnote is added to 99 [tr1::rand.eng.mers] which clarifies that the lower r bits of Xi-n are not to be compared in operator== and operator!=. It would only be consequent if furthermore the specification for the textual respresentation was changed to Xi-n bitand ((2w - 1) - (2r - 1)), Xi-(n-1), ..., Xi-1 or something similar.

These changes would likely have no practical effect, but would allow an implementation that does the right thing to be standard-conformant.

[ Bellevue: ]

Fermi Lab has no objection to the proposed change. However it feels that more time is needed to check the details, which would suggest a change to REVIEW.

Bill feels that this is NAD, not enough practical importance to abandon the simple definition of equality, and someone would have to do a lot more study to ensure that all cases are covered for a very small payback. The submitter admits that "These changes would likely have no practical effect,", and according to Plum's razor this means that it is not worth the effort!

Revisted: Agree that the fact that there is no practical difference means that no change can be justified.

Proposed resolution:

In 99 [tr1::rand.eng.mers]:

Insert at the end of para 2.:

[Note: The lower r bits of Xi-n do not influence the state transition and hence should not be compared when comparing two mersenne_twister_engine objects. -- end note]

In para 5. change:

The textual representation of xi consists of the values of Xi-n bitand ((2w - 1) - (2r - 1)), Xi-(n-1), ..., Xi-1, in that order.