drand48(3c) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

drand48(3c)

drand48(3C)              Standard C Library Functions              drand48(3C)

NAME
       drand48,  erand48, lrand48, nrand48, mrand48, jrand48, srand48, seed48,
       lcong48 - generate uniformly distributed pseudo-random numbers

SYNOPSIS
       #include <stdlib.h>

       double drand48(void)


       double erand48(unsigned short xsubi[3]);


       long lrand48(void)


       long nrand48(unsigned short xsubi[3]);


       long mrand48(void)


       long jrand48(unsigned short xsubi[3]);


       void srand48(long seedval);


       unsigned short *seed48(unsigned short seed16v[3]);


       void lcong48(unsigned short param[7]);


       int drand48_r(struct drand48_data *buffer, double *result);


       int erand48_r(unsigned short xsubi[3],
                struct drand48_data *buf, double *result);


       int lrand48_r(struct drand48_data *buf, long int *result);


       int nrand48_r(unsigned short int xsubi[3],
                struct drand48_data *buf, long int *result);


       int mrand48_r(struct drand48_data *buf, long int *result);


       int jrand48_r(unsigned short int xsubi[3],
                struct drand48_data *buf, long int *result);


       int srand48_r(long int seedval, struct drand48_data *buf);


       int seed48_r(unsigned short int seed16v[3],
                struct drand48_data *buf);


       int lcong48_r(unsigned short int param[7],
                 struct drand48_data *buf);

DESCRIPTION
       This family of functions  generates  pseudo-random  numbers  using  the
       well-known linear congruential algorithm and 48-bit integer arithmetic.


       Functions  drand48() and erand48() return non-negative double-precision
       floating-point values uniformly distributed  over  the  interval  [0.0,
       1.0).


       Functions  lrand48()  and  nrand48()  return non-negative long integers
       uniformly distributed over the interval [0, 2 ^31 ].


       Functions mrand48() and jrand48() return signed long integers uniformly
       distributed over the interval [-2 ^31 , 2 ^31 ].


       Functions srand48(), seed48(), and lcong48() are  initialization  entry
       points,  one  of  which  should  be  invoked  before  either drand48(),
       lrand48(), or mrand48() is called.  (Although  it  is  not  recommended
       practice, constant default initializer values will be supplied automat‐
       ically  if drand48(), lrand48(), or mrand48() is called without a prior
       call to an initialization entry point.) Functions erand48(), nrand48(),
       and jrand48() do not require an initialization entry point to be called
       first.


       All the routines work by generating a sequence of 48-bit  integer  val‐
       ues, X(i), according to the linear congruential formula


       X(n+1)= (aX (n)+c)(mod m) n>=0.


       The  parameter  m = 2^48; hence 48-bit integer arithmetic is performed.
       Unless lcong48() has been invoked, the multiplier value a and  the  ad‐
       dend value c are given by
         a = 5DEECE66D(16) = 273673163155(8)
         c = B(16) = 13(8)


       The  value  returned  by  any  of  the  functions drand48(), erand48(),
       lrand48(), nrand48(), mrand48(), or jrand48() is computed by first gen‐
       erating the next 48-bit X(i) in the sequence. Then the appropriate num‐
       ber of bits, according to the type of data item  to  be  returned,  are
       copied from the high-order (leftmost) bits of X(i) and transformed into
       the returned value.


       The functions drand48(), lrand48(), and mrand48() store the last 48-bit
       X(i) generated in an internal buffer. X(i) must be initialized prior to
       being  invoked.  The  functions erand48(), nrand48(), and jrand48() re‐
       quire the calling program to provide storage for  the  successive  X(i)
       values in the array specified as an argument when the functions are in‐
       voked.  These  routines do not have to be initialized; the calling pro‐
       gram must place the desired initial value of X(i) into  the  array  and
       pass  it  as  an  argument.  By  using  different  arguments, functions
       erand48(), nrand48(), and jrand48() allow separate modules of  a  large
       program  to  generate several independent streams of pseudo-random num‐
       bers, that is, the sequence of numbers in each stream will  not  depend
       upon  how  many times the routines have been called to generate numbers
       for the other streams.


       The initializer function srand48() sets the high-order 32 bits of  X(i)
       to the 32 bits contained in its argument. The low-order 16 bits of X(i)
       are set to the arbitrary value 330E(16) .


       The  initializer function seed48() sets the value of X(i) to the 48-bit
       value specified in the argument array. In addition, the previous  value
       of X(i) is copied into a 48-bit internal buffer, used only by seed48(),
       and  a  pointer  to this buffer is the value returned by seed48(). This
       returned pointer, which can just be ignored if not needed, is useful if
       a program is to be restarted from a given point at some future  time  —
       use  the  pointer to get at and store the last X(i) value, and then use
       this  value  to  reinitialize  using  seed48()  when  the  program   is
       restarted.


       The  initialization  function  lcong48() allows the user to specify the
       initial X(i) the multiplier value a, and the addend value  c.  Argument
       array  elements  param[0-2] specify X(i), param[3-5] specify the multi‐
       plier a, and param[6] specifies the 16-bit addend  c.  After  lcong48()
       has been called, a subsequent call to either srand48() or seed48() will
       restore the "standard" multiplier and addend values, a and c, specified
       above.


       Functions    drand48_r(),    erand48_r(),   jrand48_r(),   lrand48_r(),
       mrand_r(),  and  nrand_r()  are  reentrant   versions   of   drand48(),
       erand48(),  jrand48(),  lrand48(),  mrand48(), and nrand48() functions.
       They use the supplied buffer, buf, to store the random number generator
       state, as opposed to the global buffers used by the non-reentrant func‐
       tions. The buffer must be first allocated, and then initialized  either
       by  filling  with  zeroes,  or  by  calling  one  of  the  srand48_r(),
       seed48_r(), or lcong48_r() functions.


       Functions srand48_r(), seed48_r(), and lcong48_r() are  reentrant  ver‐
       sions of the functions srand48(), seed48(), and lcong48(). In addition,
       they can be used to initialize the supplied buffer, buf.

USAGE
       Programmers should use /dev/urandom or /dev/random for most random-num‐
       ber generation, especially for cryptographic purposes. See getrandom(2)
       and random(4D).

ATTRIBUTES
       See attributes(7) for descriptions of the following attributes:

       tab()  box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) ATTRIBUTE TYPEAT‐
       TRIBUTE VALUE _ Interface StabilityCommitted _ MT-LevelSafe _ Standard‐
       See standards(7).


SEE ALSO
       getrandom(2), rand(3C), random(4D), attributes(7), standards(7)

Oracle Solaris 11.4               10 Mar 2022                      drand48(3C)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3