Switch PRNG from BSD random() to Mersenne Twister

random() may yield different pseudo-random number sequences for the
same seed on another system.  For instance, at least some versions of
MinGW provide a random() in -liberty that differs from traditional BSD
(see commit c8231b12).  Rather inconvenient for regression testing.

MT19937 Mersenne Twister is a proven, high-quality PRNG.  Actual code
is reference code provided by the inventors[*].  Quick tests show
performance comparable to random().

Like random(), MT is not cryptographically secure: observing enough of
its output permits guessing its state, and thus its future output.  I
don't think players can do that.

Drop the copy of BSD random() we added for Windows.

Like the previous commit, this changes the server's die rolls, and
makes fairland create a different random map for the same seed.  Update
expected smoke test results accordingly.

[*] mt19937ar.sep.tgz downloaded from
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html
This commit is contained in:
Markus Armbruster 2012-08-25 17:21:10 +02:00
parent b5d8806eb1
commit 39c26f4238
16 changed files with 3799 additions and 4356 deletions

View file

@ -9,14 +9,6 @@ srcdir="$1"
. "$srcdir"/tests/test-common.sh
#
# Currently expected to work only with a random() that behaves exactly
# like the one on my development system.
#
if [ "`uname -s`" != "Linux" ] # lame approx. of "random() behaves like mine"
then echo "Warning: fairland test not expected to work on this system!" >&2
fi
create_sandbox
exec 3>sandbox/fairland.out