RANDOM.3
上传用户:datang2001
上传日期:2007-02-01
资源大小:53269k
文件大小:4k
源码类别:

操作系统开发

开发平台:

C/C++

  1. ." Copyright (c) 1983 Regents of the University of California.
  2. ." All rights reserved.  The Berkeley software License Agreement
  3. ." specifies the terms and conditions for redistribution.
  4. ."
  5. ." @(#)random.3 6.2 (Berkeley) 9/29/85
  6. ."
  7. .TH RANDOM 3 "September 29, 1985"
  8. .UC 5
  9. .SH NAME
  10. random, srandom, initstate, setstate - better random number generator; routines for changing generators
  11. .SH SYNOPSIS
  12. .nf
  13. .ft B
  14. #include <stdlib.h>
  15. long random(void)
  16. void srandom(unsigned fIseedfP)
  17. char *initstate(unsigned fIseedfP, char *fIstatefP, int fInfP)
  18. char *setstate(char *fIstatefP)
  19. .ft R
  20. .fi
  21. .SH DESCRIPTION
  22. .PP
  23. .B Random
  24. uses a non-linear additive feedback random number generator employing a
  25. default table of size 31 long integers to return successive pseudo-random
  26. numbers in the range from 0 to
  27. .if t 2us731s10d(mi1.
  28. .if n (2**31)(mi1.
  29. The period of this random number generator is very large, approximately
  30. .if t 16(mu(2us731s10d(mi1).
  31. .if n 16*((2**31)(mi1).
  32. .PP
  33. .B Random/srandom
  34. have (almost) the same calling sequence and initialization properties as
  35. .B rand/srand.
  36. The difference is that
  37. .BR rand (3)
  38. produces a much less random sequence (em in fact, the low dozen bits
  39. generated by rand go through a cyclic pattern.  All the bits generated by
  40. .B random
  41. are usable.  For example, ``random()&01'' will produce a random binary
  42. value.
  43. .PP
  44. Unlike
  45. .BR srand ,
  46. .B srandom
  47. does not return the old seed; the reason for this is that the amount of
  48. state information used is much more than a single word.  (Two other
  49. routines are provided to deal with restarting/changing random
  50. number generators).  Like
  51. .BR rand (3),
  52. however,
  53. .B random
  54. will by default produce a sequence of numbers that can be duplicated
  55. by calling
  56. .B srandom
  57. with 
  58. .B 1
  59. as the seed.
  60. .PP
  61. The
  62. .B initstate
  63. routine allows a state array, passed in as an argument, to be initialized
  64. for future use.  The size of the state array (in bytes) is used by
  65. .B initstate
  66. to decide how sophisticated a random number generator it should use -- the
  67. more state, the better the random numbers will be.
  68. (Current "optimal" values for the amount of state information are
  69. 8, 32, 64, 128, and 256 bytes; other amounts will be rounded down to
  70. the nearest known amount.  Using less than 8 bytes will cause an error).
  71. The seed for the initialization (which specifies a starting point for
  72. the random number sequence, and provides for restarting at the same
  73. point) is also an argument.
  74. .B Initstate
  75. returns a pointer to the previous state information array.
  76. .PP
  77. Once a state has been initialized, the
  78. .B setstate
  79. routine provides for rapid switching between states.
  80. .B Setstate
  81. returns a pointer to the previous state array; its
  82. argument state array is used for further random number generation
  83. until the next call to
  84. .B initstate
  85. or
  86. .BR setstate .
  87. .PP
  88. Once a state array has been initialized, it may be restarted at a
  89. different point either by calling
  90. .B initstate
  91. (with the desired seed, the state array, and its size) or by calling
  92. both
  93. .B setstate
  94. (with the state array) and
  95. .B srandom
  96. (with the desired seed).
  97. The advantage of calling both
  98. .B setstate
  99. and
  100. .B srandom
  101. is that the size of the state array does not have to be remembered after
  102. it is initialized.
  103. .PP
  104. With 256 bytes of state information, the period of the random number
  105. generator is greater than
  106. .if t 2us769s10d,
  107. .if n 2**69
  108. which should be sufficient for most purposes.
  109. .SH AUTHOR
  110. Earl T. Cohen
  111. .SH DIAGNOSTICS
  112. .PP
  113. If
  114. .B initstate
  115. is called with less than 8 bytes of state information, or if
  116. .B setstate
  117. detects that the state information has been garbled, error
  118. messages are printed on the standard error output.
  119. .SH "SEE ALSO"
  120. .BR rand (3).
  121. .SH NOTES
  122. .B initstate
  123. and
  124. .B setstate
  125. are not declared in
  126. .IR <stdlib.h> ,
  127. programmers must provide their own declarations.
  128. .SH BUGS
  129. About 2/3 the speed of
  130. .BR rand (3).