digitalmars.D.bugs - [Issue 15147] New: std.random.uniform return value depends on
- via Digitalmars-d-bugs (45/45) Oct 03 2015 https://issues.dlang.org/show_bug.cgi?id=15147
https://issues.dlang.org/show_bug.cgi?id=15147 Issue ID: 15147 Summary: std.random.uniform return value depends on integer size Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: normal Priority: P1 Component: phobos Assignee: nobody puremagic.com Reporter: thecybershadow gmail.com With an RNG seeded with a constant value, uniform(0, 100) and uniform(0, 100L) will return different values. Demonstration: ////////////////// test.d ////////////////// import std.random; import std.stdio; void test(T)() { Mt19937 rng; foreach (n; 0..10) write(uniform(0, T(100), rng), " "); writeln(); } void main() { test!int(); test!uint(); test!long(); test!ulong(); } //////////////////////////////////////////// This will print: 12 2 34 85 4 91 29 85 98 3 12 2 34 85 4 91 29 85 98 3 54 49 75 69 11 25 66 64 28 18 54 49 75 69 11 25 66 64 28 18 This can be a problem for applications that expect seeded RNGs to behave predictably on all platforms (e.g. to generate something procedurally than must be in sync), and pass a size_t to uniform. E.g.: string sample = arr[uniform(0, $, rng)]; --
Oct 03 2015