cvs: php4 /ext/standard rand.c
| From: | Sterling Hughes | Date: | Thu, 06 Sep 2001 00:40:03 +0000 |
| Subject: | cvs: php4 /ext/standard rand.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-7237@lists.php.net to get a copy of this message | ||
sterling Wed Sep 5 20:40:03 2001 EDT
Modified files:
/php4/ext/standard rand.c
Log:
spaces -> tabs work cont.
Index: php4/ext/standard/rand.c
diff -u php4/ext/standard/rand.c:1.45 php4/ext/standard/rand.c:1.46
--- php4/ext/standard/rand.c:1.45 Wed Sep 5 20:18:13 2001
+++ php4/ext/standard/rand.c Wed Sep 5 20:40:02 2001
@@ -19,7 +19,7 @@
| Based on code from: Shawn Cokus <Cokus@math.washington.edu> |
+----------------------------------------------------------------------+
*/
-/* $Id: rand.c,v 1.45 2001/09/06 00:18:13 sterling Exp $ */
+/* $Id: rand.c,v 1.46 2001/09/06 00:40:02 sterling Exp $ */
#include <stdlib.h>
@@ -100,12 +100,12 @@
{
/*
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 @@
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