diff options
| author | bors <bors@rust-lang.org> | 2013-08-18 10:01:55 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-08-18 10:01:55 -0700 |
| commit | 88bd2155d780d2d7d976ff271b6bb25a9b03e119 (patch) | |
| tree | 0706de0f0b8342d9069eceab52eab76e60842bc4 /src/libstd | |
| parent | 0a238288d343fc6323b37aad8678b3ea701fb7e3 (diff) | |
| parent | e7b8524b3d9e37a45e56d38f158c27b9d4234ba7 (diff) | |
| download | rust-88bd2155d780d2d7d976ff271b6bb25a9b03e119.tar.gz rust-88bd2155d780d2d7d976ff271b6bb25a9b03e119.zip | |
auto merge of #8558 : kballard/rust/xorshift-seed, r=cmr
Fixes #8359.
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/rand.rs | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/libstd/rand.rs b/src/libstd/rand.rs index 9e53c596656..35c7380e311 100644 --- a/src/libstd/rand.rs +++ b/src/libstd/rand.rs @@ -875,13 +875,22 @@ impl Rng for XorShiftRng { } impl XorShiftRng { - /// Create an xor shift random number generator with a default seed. + /// Create an xor shift random number generator with a random seed. pub fn new() -> XorShiftRng { - // constants taken from http://en.wikipedia.org/wiki/Xorshift - XorShiftRng::new_seeded(123456789u32, - 362436069u32, - 521288629u32, - 88675123u32) + // generate seeds the same way as seed(), except we have a spceific size + let mut s = [0u8, ..16]; + loop { + do s.as_mut_buf |p, sz| { + unsafe { + rustrt::rand_gen_seed(p, sz as size_t); + } + } + if !s.iter().all(|x| *x == 0) { + break; + } + } + let s: &[u32, ..4] = unsafe { cast::transmute(&s) }; + XorShiftRng::new_seeded(s[0], s[1], s[2], s[3]) } /** |
