mirror of
https://github.com/php/php-src.git
synced 2026-04-11 18:13:00 +02:00
spaces -> tabs work cont.
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user