Annotation of 43BSDReno/lib/libc/gen/random.3, revision 1.1

1.1     ! root        1: .\" Copyright (c) 1983 The Regents of the University of California.
        !             2: .\" All rights reserved.
        !             3: .\"
        !             4: .\" Redistribution and use in source and binary forms are permitted provided
        !             5: .\" that: (1) source distributions retain this entire copyright notice and
        !             6: .\" comment, and (2) distributions including binaries display the following
        !             7: .\" acknowledgement:  ``This product includes software developed by the
        !             8: .\" University of California, Berkeley and its contributors'' in the
        !             9: .\" documentation or other materials provided with the distribution and in
        !            10: .\" all advertising materials mentioning features or use of this software.
        !            11: .\" Neither the name of the University nor the names of its contributors may
        !            12: .\" be used to endorse or promote products derived from this software without
        !            13: .\" specific prior written permission.
        !            14: .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
        !            15: .\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
        !            16: .\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
        !            17: .\"
        !            18: .\"    @(#)random.3    6.4 (Berkeley) 6/23/90
        !            19: .\"
        !            20: .UC 7
        !            21: .TH RANDOM 3 "June 23, 1990"
        !            22: .UC 5
        !            23: .SH NAME
        !            24: random, srandom, initstate, setstate \- better random number generator; routines for changing generators
        !            25: .SH SYNOPSIS
        !            26: .nf
        !            27: .B long  random()
        !            28: .PP
        !            29: .B srandom(seed)
        !            30: .B int  seed;
        !            31: .PP
        !            32: .B char  *initstate(seed, state, n)
        !            33: .B unsigned  seed;
        !            34: .B char  *state;
        !            35: .B int  n;
        !            36: .PP
        !            37: .B char  *setstate(state)
        !            38: .B char  *state;
        !            39: .fi
        !            40: .SH DESCRIPTION
        !            41: .PP
        !            42: .I Random
        !            43: uses a non-linear additive feedback random number generator employing a
        !            44: default table of size 31 long integers to return successive pseudo-random
        !            45: numbers in the range from 0 to
        !            46: .if t 2\u\s731\s10\d\(mi1.
        !            47: .if n (2**31)\(mi1.
        !            48: The period of this random number generator is very large, approximately
        !            49: .if t 16\(mu(2\u\s731\s10\d\(mi1).
        !            50: .if n 16*((2**31)\(mi1).
        !            51: .PP
        !            52: .I Random/srandom
        !            53: have (almost) the same calling sequence and initialization properties as
        !            54: .I rand/srand.
        !            55: The difference is that
        !            56: .IR rand (3)
        !            57: produces a much less random sequence \(em in fact, the low dozen bits
        !            58: generated by rand go through a cyclic pattern.  All the bits generated by
        !            59: .I random
        !            60: are usable.  For example, ``random()&01'' will produce a random binary
        !            61: value.
        !            62: .PP
        !            63: Unlike
        !            64: .IR srand ,
        !            65: .I srandom
        !            66: does not return the old seed; the reason for this is that the amount of
        !            67: state information used is much more than a single word.  (Two other
        !            68: routines are provided to deal with restarting/changing random
        !            69: number generators).  Like
        !            70: .IR rand (3),
        !            71: however,
        !            72: .I random
        !            73: will by default produce a sequence of numbers that can be duplicated
        !            74: by calling
        !            75: .I srandom
        !            76: with 
        !            77: .I 1
        !            78: as the seed.
        !            79: .PP
        !            80: The
        !            81: .I initstate
        !            82: routine allows a state array, passed in as an argument, to be initialized
        !            83: for future use.  The size of the state array (in bytes) is used by
        !            84: .I initstate
        !            85: to decide how sophisticated a random number generator it should use -- the
        !            86: more state, the better the random numbers will be.
        !            87: (Current "optimal" values for the amount of state information are
        !            88: 8, 32, 64, 128, and 256 bytes; other amounts will be rounded down to
        !            89: the nearest known amount.  Using less than 8 bytes will cause an error).
        !            90: The seed for the initialization (which specifies a starting point for
        !            91: the random number sequence, and provides for restarting at the same
        !            92: point) is also an argument.
        !            93: .I Initstate
        !            94: returns a pointer to the previous state information array.
        !            95: .PP
        !            96: Once a state has been initialized, the
        !            97: .I setstate
        !            98: routine provides for rapid switching between states.
        !            99: .I Setstate
        !           100: returns a pointer to the previous state array; its
        !           101: argument state array is used for further random number generation
        !           102: until the next call to
        !           103: .I initstate
        !           104: or
        !           105: .I setstate.
        !           106: .PP
        !           107: Once a state array has been initialized, it may be restarted at a
        !           108: different point either by calling
        !           109: .I initstate
        !           110: (with the desired seed, the state array, and its size) or by calling
        !           111: both
        !           112: .I setstate
        !           113: (with the state array) and
        !           114: .I srandom
        !           115: (with the desired seed).
        !           116: The advantage of calling both
        !           117: .I setstate
        !           118: and
        !           119: .I srandom
        !           120: is that the size of the state array does not have to be remembered after
        !           121: it is initialized.
        !           122: .PP
        !           123: With 256 bytes of state information, the period of the random number
        !           124: generator is greater than
        !           125: .if t 2\u\s769\s10\d,
        !           126: .if n 2**69
        !           127: which should be sufficient for most purposes.
        !           128: .SH AUTHOR
        !           129: Earl T. Cohen
        !           130: .SH DIAGNOSTICS
        !           131: .PP
        !           132: If
        !           133: .I initstate
        !           134: is called with less than 8 bytes of state information, or if
        !           135: .I setstate
        !           136: detects that the state information has been garbled, error
        !           137: messages are printed on the standard error output.
        !           138: .SH "SEE ALSO"
        !           139: rand(3)
        !           140: .SH BUGS
        !           141: About 2/3 the speed of
        !           142: .IR rand (3C).

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.