Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ random(3) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

drand48(3C)

rand(3C)

srand(3C)

stdlib(5)

random(3)               (BSD Compatibility Package)               random(3)

NAME
     random, srandom, initstate, setstate - pseudo-random number functions

SYNOPSIS
     /usr/ucb/cc [flag ...] file ... -lucb

     #include <stdlib.h>

     long random(void);

     void srandom(unsigned int seed);

     char *initstate(unsigned int seed, char *state, sizet size);

     char *setstate(const char *state);

DESCRIPTION
     The random() function uses a nonlinear additive feedback random-number
     generator employing a default state array size of 31 long integers to
     return successive pseudo-random numbers in the range from 0 to
     (2^31)-1. The period of this random-number generator is approximately
     16*((2^31)-1). The size of the state array determines the period of
     the random-number generator. Increasing the state array size increases
     the period.

     With 256 bytes of state information, the period of the random-number
     generator is greater than 2^69.

     Like rand(), random() produces by default a sequence of numbers that
     can be duplicated by calling srandom() with 1 as the seed.

     The srandom() function initializes the current state array using the
     value of seed.

     The initstate() and setstate() functions handle restarting and chang-
     ing random-number generators. The initstate() function allows a state
     array, pointed to by the state argument, to be initialized for future
     use. The size argument, which specifies the size in bytes of the state
     array, is used by initstate() to decide what type of random-number
     generator to use; the larger the state array, the more random the
     numbers. Values for the amount of state information are 8, 32, 64,
     128, and 256 bytes. Other values greater than 8 bytes are rounded down
     to the nearest one of these values. For values greater than or equal
     to 8 or less than 32, random() uses a simple linear congruent random-
     number generator. The seed argument specifies a starting point for the
     random-number sequence and provides for restarting at the same point.
     The initstate() function returns a pointer to the previous state
     information array.

     If initstate() has not been called, then random() behaves as though
     initstate() had been called with seed = 1 and size = 128.




Page 1                       Reliant UNIX 5.44                Printed 11/98

random(3)               (BSD Compatibility Package)               random(3)

     If initstate() is called with size >= 8 and < 32, then random() uses a
     simple linear congruent random-number generator.

     Once a state has been initialized, setstate() allows switching between
     state arrays. The array defined by the state argument is used for
     further random-number generation until initstate() is called or set-
     state() is called again. The setstate() function returns a pointer to
     the previous state array.

EXAMPLE
     /* Initialize an array and pass it in to initstate. */

     static long state1[32] = {
          3,
          0x9a319039, 0x32d9c024, 0x9b663182, 0x5da1f342,
          0x7449e56b, 0xbeb1dbb0, 0xab5c5918, 0x946554fd,
          0x8c2e680f, 0xeb3d799f, 0xb11ee0b7, 0x2d436b86,
          0xda672e2a, 0x1588ca88, 0xe369735d, 0x904f35f7,
          0xd7158fd6, 0x6fa6f051, 0x616e6b96, 0xac94efdc,
          0xde3b81e0, 0xdf0a6fb5, 0xf103bc02, 0x48f340fb,
          0x36413f93, 0xc622c298, 0xf5a42ab8, 0x8a88d77b,
          0xf5ad9d0e, 0x8999220b, 0x27fb47b9
          };

     main()
     {
          unsigned seed;
          int n;

          seed = 1;
          n = 128;
          initstate(seed, state1, n);

          setstate(state1);
          printf("%d0,random());
     }

RETURN VALUE
     The random() function returns the generated pseudo-random number.

     The srandom() function returns no value.

     Upon successful completion, initstate() and setstate() return a
     pointer to the previous state array. Otherwise, a null pointer is
     returned.

     If initstate() is called with size less than 8, it returns NULL.

ERRORS
     No errors are defined.




Page 2                       Reliant UNIX 5.44                Printed 11/98

random(3)               (BSD Compatibility Package)               random(3)

APPLICATION USAGE
     After initialization, a state array can be restarted at a different
     point in one of two ways:

     -  The initstate() function can be used, with the desired seed, state
        array, and size of the array.

     -  The setstate() function, with the desired state, can be used, fol-
        lowed by srandom() with the desired seed. The advantage of using
        both of these functions is that the size of the state array does
        not have to be saved once it is initialized.

     Although some implementations of random() have written messages to
     standard error, such implementations do not conform to this descrip-
     tion.

SEE ALSO
     drand48(3C), rand(3C), srand(3C), stdlib(5).




































Page 3                       Reliant UNIX 5.44                Printed 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026