#ifndef lint static const char RCSid[] = "$Id: urand.c,v 2.9 2004/05/16 14:49:42 greg Exp $"; #endif /* * Anticorrelated random function due to Christophe Schlick */ #include "copyright.h" #include #include "standard.h" #include "random.h" #undef initurand #define MAXORDER (8*sizeof(unsigned short)) unsigned short *urperm = NULL; /* urand() permutation */ int urmask; /* bits used in permutation */ int initurand(size) /* initialize urand() for size entries */ int size; { int order, n; register int i, offset; if (urperm != NULL) free((void *)urperm); if (--size <= 0) { urperm = NULL; urmask = 0; return(0); } for (i = 1; (size >>= 1); i++) if (i == MAXORDER) break; order = i; urmask = (1< 0) hval += *d++ * tab[n&7]; return(hval); }