| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- /*Written by Timothy B. Terriberry (tterribe@xiph.org) 1999-2009 public domain.
- Based on the public domain implementation by Robert J. Jenkins Jr.*/
- #if !defined(_isaac_H)
- # define _isaac_H (1)
- typedef struct isaac_ctx isaac_ctx;
- #define ISAAC_SZ_LOG (8)
- #define ISAAC_SZ (1<<ISAAC_SZ_LOG)
- #define ISAAC_SEED_SZ_MAX (ISAAC_SZ<<2)
- /*ISAAC is the most advanced of a series of Pseudo-Random Number Generators
- designed by Robert J. Jenkins Jr. in 1996.
- http://www.burtleburtle.net/bob/rand/isaac.html
- To quote:
- No efficient method is known for deducing their internal states.
- ISAAC requires an amortized 18.75 instructions to produce a 32-bit value.
- There are no cycles in ISAAC shorter than 2**40 values.
- The expected cycle length is 2**8295 values.*/
- struct isaac_ctx{
- unsigned n;
- unsigned r[ISAAC_SZ];
- unsigned m[ISAAC_SZ];
- unsigned a;
- unsigned b;
- unsigned c;
- };
- void isaac_init(isaac_ctx *_ctx,const void *_seed,int _nseed);
- unsigned isaac_next_uint32(isaac_ctx *_ctx);
- unsigned isaac_next_uint(isaac_ctx *_ctx,unsigned _n);
- #endif
|