#include #include "kirkrand.h" static unsigned long r250_buffer[250]; static int r250_index; void r250_init(int seed) { int j,k; unsigned long mask; unsigned long msb; unsigned long token; srand(seed); r250_index=0; for (j=0;j<250;j++) { r250_buffer[j]=0; r250_buffer[j]=rand(); token=rand(); token<<=16; r250_buffer[j]^=token; } for (j=0;j<250;j++) { if (rand()>16348) r250_buffer[j]|=0x00008000L; if (rand()>16348) r250_buffer[j]|=0x80000000L; } msb=0x80000000L; mask=0xffffffffL; for (j=0;j<32;j++) { k=7*j+3; r250_buffer[k]&=mask; r250_buffer[k]|=msb; mask>>=1; msb>>=1; } } unsigned long r250(void) { register int j; register unsigned long new_rand; if (r250_index>=147) j=r250_index-147; else j=r250_index+103; new_rand=r250_buffer[r250_index]^r250_buffer[j]; r250_buffer[r250_index]=new_rand; if (r250_index>=249) r250_index=0; else r250_index++; return new_rand; } double dr250(void) { register int j; register unsigned long new_rand; double holder; new_rand=(unsigned long)0xffffffffL; holder=(double)new_rand; if (r250_index>=147) j=r250_index-147; else j=r250_index+103; new_rand=r250_buffer[r250_index]^r250_buffer[j]; r250_buffer[r250_index]=new_rand; if (r250_index>=249) r250_index=0; else r250_index++; return new_rand/holder; /* return new_rand/(unsigned long)0xffffffff;*/ }