home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 2002 November / SGI IRIX Base Documentation 2002 November.iso / usr / share / catman / p_man / cat3c / random.z / random
Encoding:
Text File  |  2002-10-03  |  5.7 KB  |  133 lines

  1.  
  2.  
  3.  
  4. RRRRAAAANNNNDDDDOOOOMMMM((((3333BBBB))))                                                          RRRRAAAANNNNDDDDOOOOMMMM((((3333BBBB))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      random, srandom, initstate, setstate - better random number generator;
  10.      routines for changing generators
  11.  
  12. SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  13.      ####iiiinnnncccclllluuuuddddeeee <<<<ssssttttddddlllliiiibbbb....hhhh>>>>
  14.  
  15.      lllloooonnnngggg rrrraaaannnnddddoooommmm((((vvvvooooiiiidddd))));;;;
  16.  
  17.      vvvvooooiiiidddd ssssrrrraaaannnnddddoooommmm((((uuuunnnnssssiiiiggggnnnneeeedddd sssseeeeeeeedddd))));;;;
  18.  
  19.      cccchhhhaaaarrrr ****iiiinnnniiiittttssssttttaaaatttteeee((((uuuunnnnssssiiiiggggnnnneeeedddd iiiinnnntttt sssseeeeeeeedddd,,,, cccchhhhaaaarrrr ****ssssttttaaaatttteeee,,,, ssssiiiizzzzeeee____tttt nnnn))));;;;
  20.  
  21.      cccchhhhaaaarrrr ****sssseeeettttssssttttaaaatttteeee((((ccccoooonnnnsssstttt cccchhhhaaaarrrr ****ssssttttaaaatttteeee))));;;;
  22.  
  23. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  24.      _R_a_n_d_o_m uses a non-linear additive feedback random number generator
  25.      employing a default table of size 31 long integers to return successive
  26.      pseudo-random numbers in the range from 0 to (2**31)-1.  The period of
  27.      this random number generator is very large, approximately 16*((2**31)-1).
  28.  
  29.      _R_a_n_d_o_m/_s_r_a_n_d_o_m have (almost) the same calling sequence and initialization
  30.      properties as _r_a_n_d/_s_r_a_n_d. The difference is that _r_a_n_d(3C) produces a much
  31.      less random sequence - in fact, the low dozen bits generated by rand go
  32.      through a cyclic pattern.  All the bits generated by _r_a_n_d_o_m are usable.
  33.      For example, ``random()&01'' will produce a random binary value.
  34.  
  35.      _S_r_a_n_d_o_m does not return the old seed; the reason for this is that the
  36.      amount of state information used is much more than a single word.  (Two
  37.      other routines are provided to deal with restarting/changing random
  38.      number generators).  Like _r_a_n_d(3C), however, _r_a_n_d_o_m will by default
  39.      produce a sequence of numbers that can be duplicated by calling _s_r_a_n_d_o_m
  40.      with _1 as the seed.
  41.  
  42.      The _i_n_i_t_s_t_a_t_e routine allows a state array, passed in as an argument, to
  43.      be initialized for future use.  The size of the state array (in bytes) is
  44.      used by _i_n_i_t_s_t_a_t_e to decide how sophisticated a random number generator
  45.      it should use -- the more state, the better the random numbers will be.
  46.      (Current "optimal" values for the amount of state information are 8, 32,
  47.      64, 128, and 256 bytes; other amounts will be rounded down to the nearest
  48.      known amount.  Using less than 8 bytes will cause an error).  The seed
  49.      for the initialization (which specifies a starting point for the random
  50.      number sequence, and provides for restarting at the same point) is also
  51.      an argument.  _I_n_i_t_s_t_a_t_e returns a pointer to the previous state
  52.      information array.
  53.  
  54.      Once a state has been initialized, the _s_e_t_s_t_a_t_e routine provides for
  55.      rapid switching between states.  _S_e_t_s_t_a_t_e returns a pointer to the
  56.      previous state array; its argument state array is used for further random
  57.      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.
  58.  
  59.  
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. RRRRAAAANNNNDDDDOOOOMMMM((((3333BBBB))))                                                          RRRRAAAANNNNDDDDOOOOMMMM((((3333BBBB))))
  71.  
  72.  
  73.  
  74.      Once a state array has been initialized, it may be restarted at a
  75.      different point either by calling _i_n_i_t_s_t_a_t_e (with the desired seed, the
  76.      state array, and its size) or by calling both _s_e_t_s_t_a_t_e (with the state
  77.      array) and _s_r_a_n_d_o_m (with the desired seed).  The advantage of calling
  78.      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
  79.      have to be remembered after it is initialized.
  80.  
  81.      With 256 bytes of state information, the period of the random number
  82.      generator is greater than 2**69 which should be sufficient for most
  83.      purposes.
  84.  
  85. DDDDIIIIAAAAGGGGNNNNOOOOSSSSTTTTIIIICCCCSSSS
  86.      If _i_n_i_t_s_t_a_t_e is called with less than 8 bytes of state information, or if
  87.      _s_e_t_s_t_a_t_e detects that the state information has been garbled, error
  88.      messages are printed on the standard error output.
  89.  
  90. SSSSEEEEEEEE AAAALLLLSSSSOOOO
  91.      drand48(3C), rand(3C)
  92.  
  93. BBBBUUUUGGGGSSSS
  94.      About 2/3 the speed of _r_a_n_d(3C).
  95.  
  96.      When _i_n_i_t_s_t_a_t_e is used in the 64bit ABI, it misinterprets the size of the
  97.      state array, causing it to overflowing the array.  A simple workaround is
  98.      to declare the state array to be twice as large as the size specified by
  99.      the third parameter.
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.