Rand.h
上传用户:liguizhu
上传日期:2015-11-01
资源大小:2422k
文件大小:2k
源码类别:

P2P编程

开发平台:

Visual C++

  1. /*
  2. ------------------------------------------------------------------------------
  3. rand.h: definitions for a random number generator
  4. By Bob Jenkins, 1996, Public Domain
  5. MODIFIED:
  6.   960327: Creation (addition of randinit, really)
  7.   970719: use context, not global variables, for internal state
  8.   980324: renamed seed to flag
  9.   980605: recommend RANDSIZL=4 for noncryptography.
  10.   010626: note this is public domain
  11. ------------------------------------------------------------------------------
  12. */
  13. #include "standard.h"
  14. #ifndef RAND
  15. #define RAND
  16. #define RANDSIZL   (4)  /* I recommend 8 for crypto, 4 for simulations */
  17. #define RANDSIZ    (1<<RANDSIZL)
  18. /* context of random number generator */
  19. struct randctx
  20. {
  21.   ub4 randcnt;
  22.   ub4 randrsl[RANDSIZ];
  23.   ub4 randmem[RANDSIZ];
  24.   ub4 randa;
  25.   ub4 randb;
  26.   ub4 randc;
  27. };
  28. typedef  struct randctx  randctx;
  29. /*
  30. ------------------------------------------------------------------------------
  31.  If (flag==TRUE), then use the contents of randrsl[0..RANDSIZ-1] as the seed.
  32. ------------------------------------------------------------------------------
  33. */
  34. void randinit( randctx *r, word flag );
  35. void isaac( randctx *r );
  36. /*
  37. ------------------------------------------------------------------------------
  38.  Call rand(/o_ randctx *r _o/) to retrieve a single 32-bit random value
  39. ------------------------------------------------------------------------------
  40. */
  41. #define rand(r) 
  42.    (!(r)->randcnt-- ? 
  43.      (isaac(r), (r)->randcnt=RANDSIZ-1, (r)->randrsl[(r)->randcnt]) : 
  44.      (r)->randrsl[(r)->randcnt])
  45. #endif  /* RAND */