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
*/