nfastrand.c 354 B

1234567891011121314151617181920212223
  1. #include <u.h>
  2. #include <libc.h>
  3. #include <libsec.h>
  4. #define Maxrand ((1UL<<31)-1)
  5. ulong
  6. nfastrand(ulong n)
  7. {
  8. ulong m, r;
  9. /*
  10. * set m to the maximum multiple of n <= 2^31-1
  11. * so we want a random number < m.
  12. */
  13. if(n > Maxrand)
  14. sysfatal("nfastrand: n too large");
  15. m = Maxrand - Maxrand % n;
  16. while((r = fastrand()) >= m)
  17. ;
  18. return r%n;
  19. }