nrand.c 262 B

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