summaryrefslogtreecommitdiff
path: root/ext/standard/rand.c
diff options
context:
space:
mode:
authorSterling Hughes <sterling@php.net>2001-09-06 00:40:02 +0000
committerSterling Hughes <sterling@php.net>2001-09-06 00:40:02 +0000
commit903c831be5cd65e5070182a74f5336eba168807d (patch)
tree64162179a0a167043916407873d0998328b9e02a /ext/standard/rand.c
parenta4c905ff1685e1854287db828f0dc207010cc697 (diff)
downloadphp-git-903c831be5cd65e5070182a74f5336eba168807d.tar.gz
spaces -> tabs work cont.
Diffstat (limited to 'ext/standard/rand.c')
-rw-r--r--ext/standard/rand.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/ext/standard/rand.c b/ext/standard/rand.c
index 8f94577e1c..6541c53baa 100644
--- a/ext/standard/rand.c
+++ b/ext/standard/rand.c
@@ -100,12 +100,12 @@ static void seedMT(php_uint32 seed TSRMLS_DC)
{
/*
We initialize state[0..(N-1)] via the generator
-
+
x_new = (69069 * x_old) mod 2^32
-
+
from Line 15 of Table 1, p. 106, Sec. 3.3.4 of Knuth's
_The Art of Computer Programming_, Volume 2, 3rd ed.
-
+
Notes (SJC): I do not know what the initial state requirements
of the Mersenne Twister are, but it seems this seeding generator
could be better. It achieves the maximum period for its modulus
@@ -113,30 +113,30 @@ static void seedMT(php_uint32 seed TSRMLS_DC)
x_initial can be even, you have sequences like 0, 0, 0, ...;
2^31, 2^31, 2^31, ...; 2^30, 2^30, 2^30, ...; 2^29, 2^29 + 2^31,
2^29, 2^29 + 2^31, ..., etc. so I force seed to be odd below.
-
+
Even if x_initial is odd, if x_initial is 1 mod 4 then
-
+
the lowest bit of x is always 1,
the next-to-lowest bit of x is always 0,
the 2nd-from-lowest bit of x alternates ... 0 1 0 1 0 1 0 1 ... ,
the 3rd-from-lowest bit of x 4-cycles ... 0 1 1 0 0 1 1 0 ... ,
the 4th-from-lowest bit of x has the 8-cycle ... 0 0 0 1 1 1 1 0 ... ,
...
-
+
and if x_initial is 3 mod 4 then
-
+
the lowest bit of x is always 1,
the next-to-lowest bit of x is always 1,
the 2nd-from-lowest bit of x alternates ... 0 1 0 1 0 1 0 1 ... ,
the 3rd-from-lowest bit of x 4-cycles ... 0 0 1 1 0 0 1 1 ... ,
the 4th-from-lowest bit of x has the 8-cycle ... 0 0 1 1 1 1 0 0 ... ,
...
-
+
The generator's potency (min. s>=0 with (69069-1)^s = 0 mod 2^32) is
16, which seems to be alright by p. 25, Sec. 3.2.1.3 of Knuth. It
also does well in the dimension 2..5 spectral tests, but it could be
better in dimension 6 (Line 15, Table 1, p. 106, Sec. 3.3.4, Knuth).
-
+
Note that the random number user does not see the values generated
here directly since reloadMT() will always munge them first, so maybe
none of all of this matters. In fact, the seed values made here could