1 \chapter{Random Number Generation}
3 Converse includes support for random number generation using a 64-bit Linear Congruential Generator (LCG).  The user can choose between using a supplied default stream shared amonst all chares on the processor, or creating a private stream.  Note that there is a limit on the number of private streams, which at the the time of writing was 15,613.
5 \function{struct CrnStream;}
6 \index{CrnStream}
7 \desc{This structure contains the current state of a random number stream.  The user is responsible for allocating the memory for this structure.}
9 \section{Default Stream Calls}
11 \function{void CrnSrand(int seed);}
12 \index{CrnSrand}
13 \desc{Seeds the default randon number generator with {\tt seed}.}
15 \function{int CrnRand(void);}
16 \index{CrnRand}
17 \desc{Returns the next random number in the default stream as an integer.}
19 \function{int CrnDrand(void);}
20 \index{CrnDrand}
21 \desc{Returns the next random number in the default stream as a double.}
23 \section{Private Stream Calls}
25 \function{void CrnInitStream(CrnStream *dest, int seed, int type);}
26 \index{CrnInitStream}
27 \desc{Initializes a new stream with its initial state stored in {\tt dest}.  The user must supply a seed in {\tt seed}, as well as the {\tt type} of the stream, where the {\tt type} can be 0, 1, or 2.}
29 \function{double CrnDouble(CrnStream *genptr);}
30 \index{CrnDouble}
31 \desc{Returns the next random number in the stream whose state is given by {\tt genptr};  the number is returned as a double.}
33 \function{double CrnInt(CrnStream *genptr);}
34 \index{CrnInt}
35 \desc{Returns the next random number in the stream whose state is given by {\tt genptr};  the number is returned as an integer.}
37 \function{double CrnFloat(CrnStream *genptr);}
38 \index{CrnFloat}
39 \desc{Returns the next random number in the stream whose state is given by {\tt genptr};  the number is returned as a float.  (Note:  This function is exactly equivalent to {\tt (float) CrnDouble(genptr); }.) }