samer@0: /* RngStream.h for ANSI C */ samer@0: #ifndef RNGSTREAM_H samer@0: #define RNGSTREAM_H samer@0: samer@0: struct rng_state { samer@0: double Cg[6]; // state of generator samer@0: }; samer@0: samer@0: struct rng_jump { samer@0: double T1[3][3]; // transition matrix for a jump in first generator samer@0: double T2[3][3]; // ditto for second samer@0: }; samer@0: samer@0: samer@0: void RngStream_InitState(struct rng_state *g); samer@0: void RngStream_InitJump(struct rng_jump *j,int e); samer@0: void RngStream_DoubleJump(struct rng_jump *j, struct rng_jump *j2); samer@0: int RngStream_SetState(struct rng_state *g, unsigned seed[6]); samer@0: void RngStream_GetState(struct rng_state *g, unsigned seed[6]); samer@0: void RngStream_Advance(struct rng_jump *j, struct rng_state *g1, struct rng_state *g2); samer@0: double RngStream_Float(struct rng_state *g1, struct rng_state *g2); samer@0: double RngStream_Double(struct rng_state *g1, struct rng_state *g2); samer@0: double RngStream_Raw(struct rng_state *g1, struct rng_state *g2); samer@0: samer@0: #endif samer@0: samer@0: