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

개요

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

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 x(i)[3]);


       long lrand48(void)


       long nrand48(unsigned short x(i)[3]);


       long mrand48(void)


       long jrand48(unsigned short x(i)[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 aand the addend
       value care 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()
       require  the calling program to provide storage for the successive X(i)
       values in the array specified as an argument  when  the  functions  are
       invoked. 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


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



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