home *** CD-ROM | disk | FTP | other *** search
-
-
-
- RRRRAAAANNNNDDDDOOOOMMMM((((3333BBBB)))) RRRRAAAANNNNDDDDOOOOMMMM((((3333BBBB))))
-
-
-
- NNNNAAAAMMMMEEEE
- random, srandom, initstate, setstate - better random number generator;
- routines for changing generators
-
- SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- ####iiiinnnncccclllluuuuddddeeee <<<<ssssttttddddlllliiiibbbb....hhhh>>>>
-
- lllloooonnnngggg rrrraaaannnnddddoooommmm((((vvvvooooiiiidddd))));;;;
-
- vvvvooooiiiidddd ssssrrrraaaannnnddddoooommmm((((uuuunnnnssssiiiiggggnnnneeeedddd sssseeeeeeeedddd))));;;;
-
- cccchhhhaaaarrrr ****iiiinnnniiiittttssssttttaaaatttteeee((((uuuunnnnssssiiiiggggnnnneeeedddd iiiinnnntttt sssseeeeeeeedddd,,,, cccchhhhaaaarrrr ****ssssttttaaaatttteeee,,,, ssssiiiizzzzeeee____tttt nnnn))));;;;
-
- cccchhhhaaaarrrr ****sssseeeettttssssttttaaaatttteeee((((ccccoooonnnnsssstttt cccchhhhaaaarrrr ****ssssttttaaaatttteeee))));;;;
-
- DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- _R_a_n_d_o_m uses a non-linear additive feedback random number generator
- employing a default table of size 31 long integers to return successive
- pseudo-random numbers in the range from 0 to (2**31)-1. The period of
- this random number generator is very large, approximately 16*((2**31)-1).
-
- _R_a_n_d_o_m/_s_r_a_n_d_o_m have (almost) the same calling sequence and initialization
- properties as _r_a_n_d/_s_r_a_n_d. The difference is that _r_a_n_d(3C) produces a much
- less random sequence - in fact, the low dozen bits generated by rand go
- through a cyclic pattern. All the bits generated by _r_a_n_d_o_m are usable.
- For example, ``random()&01'' will produce a random binary value.
-
- _S_r_a_n_d_o_m does not return the old seed; the reason for this is that the
- amount of state information used is much more than a single word. (Two
- other routines are provided to deal with restarting/changing random
- number generators). Like _r_a_n_d(3C), however, _r_a_n_d_o_m will by default
- produce a sequence of numbers that can be duplicated by calling _s_r_a_n_d_o_m
- with _1 as the seed.
-
- The _i_n_i_t_s_t_a_t_e routine allows a state array, passed in as an argument, to
- be initialized for future use. The size of the state array (in bytes) is
- used by _i_n_i_t_s_t_a_t_e to decide how sophisticated a random number generator
- it should use -- the more state, the better the random numbers will be.
- (Current "optimal" values for the amount of state information are 8, 32,
- 64, 128, and 256 bytes; other amounts will be rounded down to the nearest
- known amount. Using less than 8 bytes will cause an error). The seed
- for the initialization (which specifies a starting point for the random
- number sequence, and provides for restarting at the same point) is also
- an argument. _I_n_i_t_s_t_a_t_e returns a pointer to the previous state
- information array.
-
- Once a state has been initialized, the _s_e_t_s_t_a_t_e routine provides for
- rapid switching between states. _S_e_t_s_t_a_t_e returns a pointer to the
- previous state array; its argument state array is used for further random
- number generation until the next call to _i_n_i_t_s_t_a_t_e or _s_e_t_s_t_a_t_e.
-
-
-
-
-
- PPPPaaaaggggeeee 1111
-
-
-
-
-
-
- RRRRAAAANNNNDDDDOOOOMMMM((((3333BBBB)))) RRRRAAAANNNNDDDDOOOOMMMM((((3333BBBB))))
-
-
-
- Once a state array has been initialized, it may be restarted at a
- different point either by calling _i_n_i_t_s_t_a_t_e (with the desired seed, the
- state array, and its size) or by calling both _s_e_t_s_t_a_t_e (with the state
- array) and _s_r_a_n_d_o_m (with the desired seed). The advantage of calling
- both _s_e_t_s_t_a_t_e and _s_r_a_n_d_o_m is that the size of the state array does not
- have to be remembered after it is initialized.
-
- With 256 bytes of state information, the period of the random number
- generator is greater than 2**69 which should be sufficient for most
- purposes.
-
- DDDDIIIIAAAAGGGGNNNNOOOOSSSSTTTTIIIICCCCSSSS
- If _i_n_i_t_s_t_a_t_e is called with less than 8 bytes of state information, or if
- _s_e_t_s_t_a_t_e detects that the state information has been garbled, error
- messages are printed on the standard error output.
-
- SSSSEEEEEEEE AAAALLLLSSSSOOOO
- drand48(3C), rand(3C)
-
- BBBBUUUUGGGGSSSS
- About 2/3 the speed of _r_a_n_d(3C).
-
- When _i_n_i_t_s_t_a_t_e is used in the 64bit ABI, it misinterprets the size of the
- state array, causing it to overflowing the array. A simple workaround is
- to declare the state array to be twice as large as the size specified by
- the third parameter.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PPPPaaaaggggeeee 2222
-
-
-
-