0b034cac8014148a992a9f73b73625fdccc21c8b
1 \chapter{Converse Pseudorandom Number Generator}
3 Converse provides three different Linear Congruential Random Number Generators.
4 Each random number stream has a cycle length of \$2^{64}\$ as opposed to
5 ANSI C standard's \$2^{48}\$.
6 Also, each of the three random number streams can be split into a number of
7 per processor streams, so that the random number sequences can be computed
8 in parallel, and are reproducible. Furthermore, there is no implicit critical
9 section in the random number generator,and yet, this functionality is
10 thread-safe, because all the state information is stored in the structure
11 allocated by the programmer. Further, this state information is stored in a
12 first class object, and can be passed to other processors through messages.
13 This module of Converse is based on the public-domain
14 SPRNG\footnote{URL:{\tt http://www.ncsa.uiuc.edu/Apps/SPRNG/www/}}
15 package developed
16 by Ashok Srinivasan\footnote{Email:{\tt ashoks@ncsa.uiuc.edu}} at NCSA.
18 Interface to the Converse Pseudorandom Number Generator module is as follows:
20 \function{typedef ... CrnStream;}
21 \index{CrnStream}
22 \desc{State information for generating the next random number in the sequence.}
24 \function{void CrnInitStream(CrnStream *stream, int seed, int type)}
25 \index{CrnInitStream}
26 \desc{Initializes the new random number stream \param{stream}
27 of \param{type} using \param{seed}. \param{type} can have values 0, 1, or 2
28 to represent three types of linear congruential random number generators.}
31 \function{int CrnInt(CrnStream *stream)}
32 \index{CrnInt}
33 \desc{Returns an integer between 0 and \$2^{31}-1\$ corresponding to the next
34 random number in the sequence associated with \param{stream}.
35 Advances \param{stream} by one in the sequence.}
37 \function{double CrnDouble(CrnStream *stream)}
38 \index{CrnDouble}
39 \desc{Returns an double precision floating point number between 0 and 1
40 corresponding to the next
41 random number in the sequence associated with \param{stream}.
42 Advances \param{stream} by one in the sequence.}
43 \desc{}
45 \function{float CrnFloat(CrnStream *stream)}
46 \index{CrnFloat}
47 \desc{Returns a single precision floating point number between 0 and 1
48 corresponding to the next
49 random number in the sequence associated with \param{stream}.
50 Advances \param{stream} by one in the sequence.}