|
|
1.1 ! root 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: .B long random() ! 14: .PP ! 15: .B srandom(seed) ! 16: .B int seed; ! 17: .PP ! 18: .B char *initstate(seed, state, n) ! 19: .B unsigned seed; ! 20: .B char *state; ! 21: .B int n; ! 22: .PP ! 23: .B char *setstate(state) ! 24: .B char *state; ! 25: .fi ! 26: .SH DESCRIPTION ! 27: .PP ! 28: .I Random ! 29: uses a non-linear additive feedback random number generator employing a ! 30: default table of size 31 long integers to return successive pseudo-random ! 31: numbers in the range from 0 to ! 32: .if t 2\u\s731\s10\d\(mi1. ! 33: .if n (2**31)\(mi1. ! 34: The period of this random number generator is very large, approximately ! 35: .if t 16\(mu(2\u\s731\s10\d\(mi1). ! 36: .if n 16*((2**31)\(mi1). ! 37: .PP ! 38: .I Random/srandom ! 39: have (almost) the same calling sequence and initialization properties as ! 40: .I rand/srand. ! 41: The difference is that ! 42: .IR rand (3) ! 43: produces a much less random sequence \(em in fact, the low dozen bits ! 44: generated by rand go through a cyclic pattern. All the bits generated by ! 45: .I random ! 46: are usable. For example, ``random()&01'' will produce a random binary ! 47: value. ! 48: .PP ! 49: Unlike ! 50: .IR srand , ! 51: .I srandom ! 52: does not return the old seed; the reason for this is that the amount of ! 53: state information used is much more than a single word. (Two other ! 54: routines are provided to deal with restarting/changing random ! 55: number generators). Like ! 56: .IR rand (3), ! 57: however, ! 58: .I random ! 59: will by default produce a sequence of numbers that can be duplicated ! 60: by calling ! 61: .I srandom ! 62: with ! 63: .I 1 ! 64: as the seed. ! 65: .PP ! 66: The ! 67: .I initstate ! 68: routine allows a state array, passed in as an argument, to be initialized ! 69: for future use. The size of the state array (in bytes) is used by ! 70: .I initstate ! 71: to decide how sophisticated a random number generator it should use -- the ! 72: more state, the better the random numbers will be. ! 73: (Current "optimal" values for the amount of state information are ! 74: 8, 32, 64, 128, and 256 bytes; other amounts will be rounded down to ! 75: the nearest known amount. Using less than 8 bytes will cause an error). ! 76: The seed for the initialization (which specifies a starting point for ! 77: the random number sequence, and provides for restarting at the same ! 78: point) is also an argument. ! 79: .I Initstate ! 80: returns a pointer to the previous state information array. ! 81: .PP ! 82: Once a state has been initialized, the ! 83: .I setstate ! 84: routine provides for rapid switching between states. ! 85: .I Setstate ! 86: returns a pointer to the previous state array; its ! 87: argument state array is used for further random number generation ! 88: until the next call to ! 89: .I initstate ! 90: or ! 91: .I setstate. ! 92: .PP ! 93: Once a state array has been initialized, it may be restarted at a ! 94: different point either by calling ! 95: .I initstate ! 96: (with the desired seed, the state array, and its size) or by calling ! 97: both ! 98: .I setstate ! 99: (with the state array) and ! 100: .I srandom ! 101: (with the desired seed). ! 102: The advantage of calling both ! 103: .I setstate ! 104: and ! 105: .I srandom ! 106: is that the size of the state array does not have to be remembered after ! 107: it is initialized. ! 108: .PP ! 109: With 256 bytes of state information, the period of the random number ! 110: generator is greater than ! 111: .if t 2\u\s769\s10\d, ! 112: .if n 2**69 ! 113: which should be sufficient for most purposes. ! 114: .SH AUTHOR ! 115: Earl T. Cohen ! 116: .SH DIAGNOSTICS ! 117: .PP ! 118: If ! 119: .I initstate ! 120: is called with less than 8 bytes of state information, or if ! 121: .I setstate ! 122: detects that the state information has been garbled, error ! 123: messages are printed on the standard error output. ! 124: .SH "SEE ALSO" ! 125: rand(3) ! 126: .SH BUGS ! 127: About 2/3 the speed of ! 128: .IR rand (3C).
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.