summaryrefslogtreecommitdiffstats
path: root/man-pages-posix-2013/man3p/initstate.3p
diff options
context:
space:
mode:
Diffstat (limited to 'man-pages-posix-2013/man3p/initstate.3p')
-rw-r--r--man-pages-posix-2013/man3p/initstate.3p189
1 files changed, 189 insertions, 0 deletions
diff --git a/man-pages-posix-2013/man3p/initstate.3p b/man-pages-posix-2013/man3p/initstate.3p
new file mode 100644
index 0000000..99559c4
--- /dev/null
+++ b/man-pages-posix-2013/man3p/initstate.3p
@@ -0,0 +1,189 @@
+'\" et
+.TH INITSTATE "3P" 2013 "IEEE/The Open Group" "POSIX Programmer's Manual"
+.SH PROLOG
+This manual page is part of the POSIX Programmer's Manual.
+The Linux implementation of this interface may differ (consult
+the corresponding Linux manual page for details of Linux behavior),
+or the interface may not be implemented on Linux.
+
+.SH NAME
+initstate,
+random,
+setstate,
+srandom
+\(em pseudo-random number functions
+.SH SYNOPSIS
+.LP
+.nf
+#include <stdlib.h>
+.P
+char *initstate(unsigned \fIseed\fP, char *\fIstate\fP, size_t \fIsize\fP);
+long random(void);
+char *setstate(char *\fIstate\fP);
+void srandom(unsigned \fIseed\fP);
+.fi
+.SH DESCRIPTION
+The
+\fIrandom\fR()
+function shall use a non-linear additive feedback random-number
+generator employing a default state array size of 31
+.BR long
+integers to return successive pseudo-random numbers in the range from 0
+to 2\u\s-331\s+3\d\(mi1. The period of this random-number generator is
+approximately 16 x (2\s-3\u31\d\s+3\(mi\fR1). The size of the state
+array determines the period of the random-number generator. Increasing
+the state array size shall increase the period.
+.P
+With 256 bytes of state information, the period of the random-number
+generator shall be greater than 2\s-3\u69\d\s+3.
+.P
+Like
+\fIrand\fR(),
+\fIrandom\fR()
+shall produce by default a sequence of numbers that can be duplicated
+by calling
+\fIsrandom\fR()
+with 1 as the seed.
+.P
+The
+\fIsrandom\fR()
+function shall initialize the current state array using the value of
+.IR seed .
+.P
+The
+\fIinitstate\fR()
+and
+\fIsetstate\fR()
+functions handle restarting and changing random-number generators. The
+\fIinitstate\fR()
+function allows a state array, pointed to by the
+.IR state
+argument, to be initialized for future use. The
+.IR size
+argument, which specifies the size in bytes of the state array, shall
+be used by
+\fIinitstate\fR()
+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. If
+\fIinitstate\fR()
+is called with 8\(<=\fIsize\fR<32, then
+\fIrandom\fR()
+shall use a simple linear congruential random number generator. The
+.IR seed
+argument specifies a starting point for the random-number sequence and
+provides for restarting at the same point. The
+\fIinitstate\fR()
+function shall return a pointer to the previous state information array.
+.P
+If
+\fIinitstate\fR()
+has not been called, then
+\fIrandom\fR()
+shall behave as though
+\fIinitstate\fR()
+had been called with
+.IR seed =1
+and
+.IR size =128.
+.P
+Once a state has been initialized,
+\fIsetstate\fR()
+allows switching between state arrays. The array defined by the
+.IR state
+argument shall be used for further random-number generation until
+\fIinitstate\fR()
+is called or
+\fIsetstate\fR()
+is called again. The
+\fIsetstate\fR()
+function shall return a pointer to the previous state array.
+.SH "RETURN VALUE"
+If
+\fIinitstate\fR()
+is called with
+.IR size
+less than 8, it shall return NULL.
+.P
+The
+\fIrandom\fR()
+function shall return the generated pseudo-random number.
+.P
+The
+\fIsrandom\fR()
+function shall not return a value.
+.P
+Upon successful completion,
+\fIinitstate\fR()
+and
+\fIsetstate\fR()
+shall return a pointer to the previous state array; otherwise, a null
+pointer shall be returned.
+.SH ERRORS
+No errors are defined.
+.LP
+.IR "The following sections are informative."
+.SH EXAMPLES
+None.
+.SH "APPLICATION USAGE"
+After initialization, a state array can be restarted at a different
+point in one of two ways:
+.IP " 1." 4
+The
+\fIinitstate\fR()
+function can be used, with the desired seed, state array, and size of
+the array.
+.IP " 2." 4
+The
+\fIsetstate\fR()
+function, with the desired state, can be used, followed by
+\fIsrandom\fR()
+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.
+.P
+Although some implementations of
+\fIrandom\fR()
+have written messages to standard error, such implementations do not
+conform to POSIX.1\(hy2008.
+.P
+Issue 5 restored the historical behavior of this function.
+.P
+Threaded applications should use
+\fIerand48\fR(),
+\fInrand48\fR(),
+or
+\fIjrand48\fR()
+instead of
+\fIrandom\fR()
+when an independent random number sequence in multiple threads is
+required.
+.SH RATIONALE
+None.
+.SH "FUTURE DIRECTIONS"
+None.
+.SH "SEE ALSO"
+.IR "\fIdrand48\fR\^(\|)",
+.IR "\fIrand\fR\^(\|)"
+.P
+The Base Definitions volume of POSIX.1\(hy2008,
+.IR "\fB<stdlib.h>\fP"
+.SH COPYRIGHT
+Portions of this text are reprinted and reproduced in electronic form
+from IEEE Std 1003.1, 2013 Edition, Standard for Information Technology
+-- Portable Operating System Interface (POSIX), The Open Group Base
+Specifications Issue 7, Copyright (C) 2013 by the Institute of
+Electrical and Electronics Engineers, Inc and The Open Group.
+(This is POSIX.1-2008 with the 2013 Technical Corrigendum 1 applied.) In the
+event of any discrepancy between this version and the original IEEE and
+The Open Group Standard, the original IEEE and The Open Group Standard
+is the referee document. The original Standard can be obtained online at
+http://www.unix.org/online.html .
+
+Any typographical or formatting errors that appear
+in this page are most likely
+to have been introduced during the conversion of the source files to
+man page format. To report such errors, see
+https://www.kernel.org/doc/man-pages/reporting_bugs.html .