odd mt_srand behavior

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • geoffp

    odd mt_srand behavior

    Apparently seeding mt_srand with different integers can produce identical
    series of mt_rand results. Specifically, every pair of consecutive even and
    odd numbers produces the same series - see below. This is a nuisance for
    me. Am I doing something wrong? I'm using PHP 4.3.4 on a windows box.

    Thanks
    Geoff

    mt_srand(0); echo " 0 new rnd =" . mt_rand() . " rnd =" . mt_rand() . " rnd
    =" . mt_rand() . "<BR>";

    mt_srand(1); echo " 1 new rnd =" . mt_rand() . " rnd =" . mt_rand() . " rnd
    =" . mt_rand() . "<BR>";

    mt_srand(2); echo " 2 new rnd =" . mt_rand() . " rnd =" . mt_rand() . " rnd
    =" . mt_rand() . "<BR>";

    mt_srand(3); echo " 3 new rnd =" . mt_rand() . " rnd =" . mt_rand() . " rnd
    =" . mt_rand() . "<BR>";

    mt_srand(4); echo " 4 new rnd =" . mt_rand() . " rnd =" . mt_rand() . " rnd
    =" . mt_rand() . "<BR>";

    mt_srand(100000 ); echo " 100000 new rnd =" . mt_rand() . " rnd =" .
    mt_rand() . " rnd =" . mt_rand() . "<BR>";

    mt_srand(100001 ); echo " 100001 new rnd =" . mt_rand() . " rnd =" .
    mt_rand() . " rnd =" . mt_rand() . "<BR>";

    mt_srand(100002 ); echo " 100002 new rnd =" . mt_rand() . " rnd =" .
    mt_rand() . " rnd =" . mt_rand() . "<BR>";

    mt_srand(100003 ); echo " 100003 new rnd =" . mt_rand() . " rnd =" .
    mt_rand() . " rnd =" . mt_rand() . "<BR>";

    mt_srand(100004 ); echo " 100004 new rnd =" . mt_rand() . " rnd =" .
    mt_rand() . " rnd =" . mt_rand() . "<BR>";

    produces

    0 new rnd =1898087491 rnd =2091264893 rnd =1090025303
    1 new rnd =1898087491 rnd =2091264893 rnd =1090025303
    2 new rnd =1309289693 rnd =1266233749 rnd =2011030501
    3 new rnd =1309289693 rnd =1266233749 rnd =2011030501
    4 new rnd =265425943 rnd =110448983 rnd =1971643347
    100000 new rnd =863778341 rnd =827028059 rnd =1038256368
    100001 new rnd =863778341 rnd =827028059 rnd =1038256368
    100002 new rnd =1020061831 rnd =477025457 rnd =1071505930
    100003 new rnd =1020061831 rnd =477025457 rnd =1071505930
    100004 new rnd =2050501876 rnd =406342065 rnd =79708900


  • Andy Hassall

    #2
    Re: odd mt_srand behavior

    On Wed, 30 Aug 2006 12:41:07 GMT, "geoffp" <fwerfrf@jhgjhf ggb.comwrote:
    >Apparently seeding mt_srand with different integers can produce identical
    >series of mt_rand results. Specifically, every pair of consecutive even and
    >odd numbers produces the same series - see below. This is a nuisance for
    >me. Am I doing something wrong? I'm using PHP 4.3.4 on a windows box.
    Weird, but see the comments in ext/standard/rand.c:

    "
    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
    (2^30) iff x_initial is odd (p. 20-21, Sec. 3.2.1.2, Knuth); if
    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.
    "

    --
    Andy Hassall :: andy@andyh.co.u k :: http://www.andyh.co.uk
    http://www.andyhsoftware.co.uk/space :: disk and FTP usage analysis tool

    Comment

    Working...