1*3e12c5d1SDavid du Colombier #include <stdlib.h> 2*3e12c5d1SDavid du Colombier 3*3e12c5d1SDavid du Colombier #define MASK 0x7FFFFFFFL 4*3e12c5d1SDavid du Colombier #define FRACT (1.0 / (MASK + 1.0)) 5*3e12c5d1SDavid du Colombier 6*3e12c5d1SDavid du Colombier extern long lrand(void); 7*3e12c5d1SDavid du Colombier 8*3e12c5d1SDavid du Colombier double frand(void)9*3e12c5d1SDavid du Colombierfrand(void) 10*3e12c5d1SDavid du Colombier { 11*3e12c5d1SDavid du Colombier 12*3e12c5d1SDavid du Colombier return lrand() * FRACT; 13*3e12c5d1SDavid du Colombier } 14*3e12c5d1SDavid du Colombier nrand(int n)15*3e12c5d1SDavid du Colombiernrand(int n) 16*3e12c5d1SDavid du Colombier { 17*3e12c5d1SDavid du Colombier long slop, v; 18*3e12c5d1SDavid du Colombier 19*3e12c5d1SDavid du Colombier slop = MASK % n; 20*3e12c5d1SDavid du Colombier do 21*3e12c5d1SDavid du Colombier v = lrand(); 22*3e12c5d1SDavid du Colombier while(v <= slop); 23*3e12c5d1SDavid du Colombier return v % n; 24*3e12c5d1SDavid du Colombier } 25