home *** CD-ROM | disk | FTP | other *** search
-
- RANDOM(3) UNIX Programmer's Manual RANDOM(3)
-
- NNAAMMEE
- rraannddoomm, ssrraannddoomm, iinniittssttaattee, sseettssttaattee - better random number generator;
- routines for changing generators
-
- SSYYNNOOPPSSIISS
- ##iinncclluuddee <<ssttddlliibb>>
-
- _l_o_n_g
- rraannddoomm(_v_o_i_d)
-
- _v_o_i_d
- ssrraannddoomm(_u_n_s_i_g_n_e_d _s_e_e_d)
-
- _c_h_a_r _*
- iinniittssttaattee(_u_n_s_i_g_n_e_d _s_e_e_d, _c_h_a_r _*_s_t_a_t_e, _i_n_t _n)
-
- _c_h_a_r _*
- sseettssttaattee(_c_h_a_r _*_s_t_a_t_e)
-
- DDEESSCCRRIIPPTTIIOONN
- The rraannddoomm() function uses a nonlinear additive feedback random number
- generator employing a default table of size 31 long integers to return
- successive pseudorandom 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).
-
- The rraannddoomm()/ ssrraannddoomm() have (almost) the same calling sequence and ini
- tialization properties as rand(3)/ srand(3). The difference is that
- rand 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
- rraannddoomm() are usable. For example, `random()&01' will produce a random
- binary value.
-
- Unlike srand, ssrraannddoomm() 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 restart
- ing/changing random number generators). Like rand(3), however, rraannddoomm()
- will by default produce a sequence of numbers that can be duplicated by
- calling ssrraannddoomm() with `1' as the seed.
-
- The iinniittssttaattee() 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 iinniittssttaattee() to decide how sophisticated a random number gener
- ator 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. The iinniittssttaattee() function returns a pointer to the pre
- vious state information array.
-
- Once a state has been initialized, the sseettssttaattee() routine provides for
- rapid switching between states. The sseettssttaattee() function returns a point
- er to the previous state array; its argument state array is used for fur
- ther random number generation until the next call to iinniittssttaattee() or
- sseettssttaattee().
-
- Once a state array has been initialized, it may be restarted at a differ
- ent point either by calling iinniittssttaattee() (with the desired seed, the state
- array, and its size) or by calling both sseettssttaattee() (with the state array)
- and ssrraannddoomm() (with the desired seed). The advantage of calling both
- sseettssttaattee() and ssrraannddoomm() 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 gen
- erator is greater than 2**69 which should be sufficient for most purpos
- es.
-
- AAUUTTHHOORR
- Earl T. Cohen
-
- DDIIAAGGNNOOSSTTIICCSS
- If iinniittssttaattee() is called with less than 8 bytes of state information, or
- if sseettssttaattee() detects that the state information has been garbled, error
- messages are printed on the standard error output.
-
- SSEEEE AALLSSOO
- rand(3)
-
- HHIISSTTOORRYY
- These functions appeared in 4.2BSD.
-
- BBUUGGSS
- About 2/3 the speed of rand(3).
-
- 4.2 Berkeley Distribution April 19, 1991 2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-