code:

Can't Copy and Paste this?

Click here for a copy-and-paste friendly version of this code!

 

Terms of Agreement:   

By using this code, you agree to the following terms...   

1) You may use this code in your own programs (and may compile it into a program and distribute it in compiled format for langauges that allow it) freely and with no charge.   

2) You MAY NOT redistribute this code (for example to a web site) without written permission from the original author. Failure to do so is a violation of copyright laws.   

3) You may link to this code from another website, but ONLY if it is not wrapped in a frame. 

4) You will abide by any additional copyright restrictions which the author may have placed in the code or code's description.  

//     

/* +++Date last modified: 05-Jul-1997 */

static unsigned long mcgn, srgn;

#define MULT 69069L

void rstart (long i1, long i2)

    {

    mcgn = (unsigned long)((i1 == 0L) ? 0L : i1 | 1L);

    srgn = (unsigned long)((i2 == 0L) ? 0L : (i2 & 0x7FFL) | 1L);

}

long uni(void)

    {

    unsigned long r0, r1;

    r0 = (srgn >> 15);

    r1 = srgn ^ r0;

    r0 = (r1 << 17);

    srgn = r0 ^ r1;

    mcgn = MULT * mcgn;

    r1 = mcgn ^ srgn;

    return (r1 >> 1);

}

long vni(void)

    {

    unsigned long r0, r1;

    r0 = (srgn >> 15);

    r1 = srgn ^ r0;

    r0 = (r1 << 17);

    srgn = r0 ^ r1;

    mcgn = MULT * mcgn;

    r1 = mcgn ^ srgn;

    return r1;

}

/* 

"Anyone who consider arithmetic means of producing random number is,

of course, in a state of sin" - John Von Neumann

*/