[Libreoffice-commits] core.git: comphelper/source
Norbert Thiebaud
nthiebaud at gmail.com
Tue May 5 03:42:20 PDT 2015
comphelper/source/misc/random.cxx | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
New commits:
commit 011563a083da45b7c6805ec42778672d4a0fb0dc
Author: Norbert Thiebaud <nthiebaud at gmail.com>
Date: Fri May 1 22:58:26 2015 -0500
seed mt19937 with random data
time(NULL) is a poor seed. It is quite predictable and
multiple instance starting in the same second will get the same seed
and therefore the same pseudo random number sequence
Use std::random_device, witch is meant to provide 'true' random
data.. mix time(NULL) just in case the std implementation is crappy.
PS: sadly std::random_device.entropy() cannot be relied on
as clang and gcc are known to return 0 despite their random_device
being non-deterministic, hence the prophylactic systematic
mixing with time(null)
Change-Id: I44dab9970f8f0388dc1c99e9816d49d1afbecf18
Reviewed-on: https://gerrit.libreoffice.org/15591
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Michael Stahl <mstahl at redhat.com>
diff --git a/comphelper/source/misc/random.cxx b/comphelper/source/misc/random.cxx
index ea6c6a1..84e3176 100644
--- a/comphelper/source/misc/random.cxx
+++ b/comphelper/source/misc/random.cxx
@@ -37,12 +37,13 @@ struct RandomNumberGenerator
STD_RNG_ALGO global_rng;
RandomNumberGenerator()
{
+ std::random_device rd;
// initialises the state of the global random number generator
// should only be called once.
// (note, a few std::variate_generator<> (like normal) have their
// own state which would need a reset as well to guarantee identical
// sequence of numbers, e.g. via myrand.distribution().reset())
- global_rng.seed(time(NULL));
+ global_rng.seed(rd() ^ time(nullptr));
}
};
More information about the Libreoffice-commits
mailing list