[Issue 17068] New: Range-based seeding of MersenneTwisterEngine is inconsistent with C++11
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Sat Jan 7 14:22:41 PST 2017
https://issues.dlang.org/show_bug.cgi?id=17068
Issue ID: 17068
Summary: Range-based seeding of MersenneTwisterEngine is
inconsistent with C++11
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Severity: normal
Priority: P1
Component: phobos
Assignee: nobody at puremagic.com
Reporter: joseph.wakeling at webdrake.net
Created attachment 1631
--> https://issues.dlang.org/attachment.cgi?id=1631&action=edit
Small example of range-based seeding of Phobos Mersenne Twister
std.random's `MersenneTwisterEngine` includes a `seed` method that accepts an
input range from which the state of the generator can be initialized. This
method superficially seems similar to the sequence-based seeding mechanism that
can be used when seeding the C++11 <random> `mt19937` engine, but its behaviour
is different in several ways:
* the Phobos method will reject any range whose length is less than the size of
the generator's internal state array. By contrast the C++11 `mt19937` accepts
a seed sequence of any length (including 1);
* seeding with identical sequences produces completely different results for
the C++11 and D versions. Besides simply being inconsistent (and probably also
at odds with reference seeding methods for the Mersenne Twister) this may make
it harder for users to port C++ code to D.
It is therefore suggested to implement a new range-based seeding mechanism that
matches the C++11 seed-sequence behaviour, and deprecate the old seeding
method.
--
More information about the Digitalmars-d-bugs
mailing list