27 lines
609 B
C
27 lines
609 B
C
|
#include <stdio.h>
|
||
|
#include <math.h>
|
||
|
#include <stdlib.h>
|
||
|
static unsigned long Q[4096], c = 362436;
|
||
|
/* choose random initial c<809430660 and */
|
||
|
/* 4096 random 32-bit integers for Q[] */
|
||
|
unsigned long mwc(void)
|
||
|
{
|
||
|
unsigned long long t, a = 18782LL;
|
||
|
static unsigned long i = 4095;
|
||
|
unsigned long x, r = 0xfffffffe;
|
||
|
i= (i+1)&4095;
|
||
|
t = a * Q[i] + c;
|
||
|
c=(t >> 32);
|
||
|
x = t + c;
|
||
|
if(x < c)
|
||
|
{
|
||
|
x++;
|
||
|
c++;
|
||
|
}
|
||
|
return (Q[i] = r - x);
|
||
|
}
|
||
|
int main(void)
|
||
|
{
|
||
|
printf("\nRandom Number generated : %lld\n", mwc());
|
||
|
return 0;
|
||
|
}
|