Provided by: libmath-random-perl_0.72-2build5_amd64 bug

NAME

       Math::Random - Random Number Generators

SYNOPSIS

       •

            use Math::Random;

           Exports the following routines by default (see "Default Routines"):

            random_set_seed_from_phrase
            random_get_seed
            random_seed_from_phrase
            random_set_seed
            random_uniform
            random_uniform_integer
            random_permutation
            random_permuted_index
            random_normal

           In  this  case  the  extended  routines  (see "Extended Routines") can be used by    qualifying  them
           explicitly  with "Math::Random::",   for example: "$stdexp = Math::Random::random_exponential();"

       •

            use Math::Random qw(random_beta
                                random_chi_square
                                random_exponential
                                random_f
                                random_gamma
                                random_multivariate_normal
                                random_multinomial
                                random_noncentral_chi_square
                                random_noncentral_f
                                random_normal
                                random_permutation
                                random_permuted_index
                                random_uniform
                                random_poisson
                                random_uniform_integer
                                random_negative_binomial
                                random_binomial
                                random_seed_from_phrase
                                random_get_seed
                                random_set_seed_from_phrase
                                random_set_seed );

           Exports all the routines explicitly.  Use a subset of the list for the routines you want.

       •

            use Math::Random qw(:all);

           Exports all the routines, as well.

DESCRIPTION

       Math::Random is  a Perl port  of the  C  version  of  randlib,  which  is    a  suite  of   routines  for
       generating  random deviates.  See "RANDLIB" for more information.

       This  port  supports  all of the distributions  from which the Fortran and C  versions generate deviates.
       The major functionalities that are excluded  are   the   multiple   generators/splitting   facility   and
       antithetic   random  number  generation.   These facilities,  along with some of  the distributions which
       are  included, are probably not of interest   except  to the   very  sophisticated   user.  If there   is
       sufficient interest, the excluded   facilities will be included in   a future  release.    The  code   to
       perform the  excluded facilities  is available as randlib in Fortran and C source.

   Default Routines
       The  routines which are exported by default are  the only ones that the average Perl programmer is likely
       to need.

       random_set_seed_from_phrase($phrase)
           Sets  the  seed   of the  base  generator  to   a  value determined by $phrase.  If   the  module  is
           installed with  the default option, the value depends on the  machine collating sequence.  It should,
           however,  be  the   same  for 7-bit ASCII character  strings on all ASCII machines.  In the  original
           randlib,  the  value   generated  for   a  given  $phrase  was  consistent  from  implementation   to
           implementation   (it  did  not  rely  on  the  machine  collating  sequence).   Check  with your Perl
           administrator to see if the module was installed with the original seed generator.  Note:   When  the
           Perl  processor  loads  package   Math::Random   the seed  is set   to a value  based on  the current
           time.  The seed  changes  each time Math::Random  generates something random.

           The ability to set the seed is useful for debugging,  or for those who like reproducible runs.

       random_get_seed()
           Returns  an   array of  length two   which   contains   the   two  integers  constituting   the  seed
           (assuming    a  call    in  array    context).   An invocation   in  a scalar  context  returns   the
           integer 2, which is probably not useful.

       random_seed_from_phrase($phrase)
           Returns   an  array of  length  two which   contains    the  two  integers  constituting    the  seed
           (assuming  a     call   in  array   context).    An  invocation    in  a scalar  context returns  the
           integer  2, which is probably not useful.  The  seed generated is the seed  used to set the seed in a
           call to "random_set_seed_from_phrase".

           Note:   the  following  two calls  (for   the  same $phrase) are equivalent:

            random_set_seed(random_seed_from_phrase($phrase));

           and

            random_set_seed_from_phrase($phrase);

       random_set_seed(@seed)
           Sets  the  seed  of the  base  generator  to  the value @seed[0,1].  Usually,  the   argument   @seed
           should  be   the  result  of  a  call to "random_get_seed"  or "random_seed_from_phrase".  @seed[0,1]
           must be two integers in the range (1, 1) to (2147483562, 2147483398), inclusive.

       "random_uniform($n, $low, $high)"
       random_uniform($n)
       random_uniform()
           When  called   in  an  array  context,   returns  an  array  of   $n  deviates  generated  from     a
           uniform($low, $high) distribution.    When called in  a scalar context,    generates and returns only
           one   such deviate as a scalar, regardless of the value of $n.

           Argument restrictions: $low must be less than or equal to $high.

           Defaults are  (1, 0, 1).    Note:  $high must   be specified if $low is specified.

       "random_uniform_integer($n, $low, $high)"
           When  called   in  an  array  context,   returns   an array of  $n integer deviates generated from  a
           uniform($low, $high) distribution on the   integers.  When called   in a  scalar  context,  generates
           and returns only one such deviate as a  scalar, regardless of the value of $n.

           Argument   restrictions:  $low  and $high  are  first rounded using int(); the resulting $low must be
           less than or equal to $high, and the resulting  range ($high - $low)   must  not   be   greater  than
           2147483561.

           There are no defaults; all three arguments must be provided.

       random_permutation(@array)
           Returns @array, randomly permuted.

       random_permuted_index($n)
           Returns   an  array   of   array  indices, randomly  permuted.  The indices used are (0, ... , $n-1).
           This produces the indices used by "random_permutation" for a given seed, without passing arrays.

           Note: the following are equivalent:

            random_set_seed_from_phrase('jjv');
            random_permutation(@array);

           and

            random_set_seed_from_phrase('jjv');
            @array[(random_permuted_index(scalar(@array)))];

       "random_normal($n, $av, $sd)"
       "random_normal($n, $av)"
       random_normal($n)
       random_normal()
           When called in  an array context, returns  an array  of $n  deviates  generated  from  a  normal($av,
           $sd^2)  distribution.   When  called  in  a  scalar  context,  generates  and returns  only one  such
           deviate as a scalar, regardless of the value of $n.

           Argument restrictions: $sd must be non-negative.

           Defaults are (1, 0, 1).

   Extended Routines
       These routines generate deviates from many other distributions.

       Note: The parameterizations of these deviates are standard (insofar as there is a  standard  ...   )  but
       particular  attention   should  be  paid  to  the distributions of the beta  and gamma deviates (noted in
       "random_beta" and "random_gamma" below).

       "random_beta($n, $aa, $bb)"
           When called in an array  context, returns an   array  of  $n   deviates  generated  from   the   beta
           distribution  with parameters  $aa and $bb.  The density of the beta is:

           X^($aa - 1) * (1 - X)^($bb - 1) / B($aa , $bb) for 0 < X < 1.

           When  called  in   a  scalar  context,  generates   and  returns  only  one such deviate as a scalar,
           regardless of the value of $n.

           Argument restrictions:  Both $aa and $bb must  not  be less than 1.0E-37.

           There are no defaults; all three arguments must be provided.

       "random_binomial($n, $nt, $p)"
           When called  in an array context,  returns an array  of $n outcomes  generated   from  the   binomial
           distribution with  number  of trials $nt and probability of an  event in each  trial $p.  When called
           in  a  scalar  context,  generates  and returns  only one such outcome as a scalar, regardless of the
           value of $n.

           Argument restrictions: $nt  is rounded  using int(); the  result must be non-negative.   $p  must  be
           between 0 and 1 inclusive.

           There are no defaults; both arguments must be provided.

       "random_chi_square($n, $df)"
           When  called  in  an   array context, returns an  array of $n  deviates generated from the chi-square
           distribution with $df degrees  of freedom.  When called in a  scalar context, generates  and  returns
           only one such deviate as a scalar, regardless of the value of $n.

           Argument restrictions: $df must be positive.

           There are no defaults; both arguments must be provided.

       "random_exponential($n, $av)"
       random_exponential($n)
       random_exponential()
           When   called  in  an  array context, returns  an array of $n deviates generated from the exponential
           distribution with mean $av.  When called    in a scalar  context, generates   and  returns  only  one
           such deviate as a scalar, regardless of the value of $n.

           Argument restrictions: $av must be non-negative.

           Defaults are (1, 1).

       "random_f($n, $dfn, $dfd)"
           When  called   in an array  context, returns an  array of $n deviates generated from the F  (variance
           ratio) distribution with degrees of freedom $dfn (numerator) and $dfd (denominator).  When called  in
           a  scalar  context,   generates  and   returns only  one such deviate  as a scalar, regardless of the
           value of $n.

           Argument restrictions: Both $dfn and $dfd must be positive.

           There are no defaults; all three arguments must be provided.

       "random_gamma($n, $a, $r)"
           When called in  an array context, returns  an array  of   $n  deviates  generated  from   the   gamma
           distribution  with  parameters $a and $r.  The density of the gamma is:

           ($a**$r) / Gamma($r) * X**($r - 1) * Exp(-$a*X)

           When  called  in   a  scalar  context,  generates  and   returns  only  one such deviate as a scalar,
           regardless of the value of $n.

           Argument restrictions: Both $a and $r must be positive.

           There are no defaults; all three arguments must be provided.

       "random_multinomial($n, @p)"
           When called in an array  context, returns single observation from  the multinomial distribution, with
           $n events classified into as many categories as the length of @p.   The probability of an event being
           classified into category i is given by the ith element of @p.   The  observation  is  an  array  with
           length  equal to @p, so when called in a scalar  context it  returns  the length  of @p.   The sum of
           the elements of the observation is equal to $n.

           Argument  restrictions: $n is  rounded  with int() before it  is used; the   result   must  be   non-
           negative.    @p  must have  length at least 2.  All elements of @p except the  last must be between 0
           and 1  inclusive, and sum to  no  more than   0.99999.  Note: The  last element of @p is a  dummy  to
           indicate  the number of categories, and it is adjusted to bring the sum of the elements of @p to 1.

           There are no defaults; both arguments must be provided.

       "random_multivariate_normal($n, @mean, @covar)"
           When   called  in  an  array  context,  returns  an array of $n deviates (each   deviate  being    an
           array  reference) generated   from   the multivariate  normal  distribution with  mean  vector  @mean
           and  variance-covariance   matrix   @covar.      When  called   in  a  scalar context,  generates and
           returns only  one  such  deviate  as an array reference, regardless of the value of $n.

           Argument restrictions: If the dimension of the deviate to be generated is  p,   @mean   should  be  a
           length  p  array   of  real   numbers.  @covar should be  a length p array of  references to length p
           arrays of real  numbers  (i.e.  a  p  by   p   matrix).    Further,  @covar  should  be  a  symmetric
           positive-definite  matrix,  although  the  Perl  code  does  not check positive-definiteness, and the
           underlying C code    assumes  the  matrix  is   symmetric.    Given  that    the  variance-covariance
           matrix  is   symmetric, it   doesn't matter if   the references  refer   to rows  or columns.   If  a
           non-positive definite matrix is passed  to the function,  it  will abort with the  following message:

            COVM not positive definite in SETGMN

           Also,  a    non-symmetric   @covar may    produce  deviates without complaint,  although they may not
           be  from the expected distribution.  For  these  reasons,  you   are    encouraged   to  verify   the
           arguments passed.

           The  Perl code does   check  the dimensionality of @mean   and @covar for consistency.  It does so by
           checking that the length of the argument  vector  passed is  odd,  that  what  should  be  the   last
           element  of  @mean  and the first element  of @covar look like they are a number followed by an array
           reference respectively, and that the arrays referred to in @covar are as long as @mean.

           There are no defaults; all three arguments must be provided.

       "random_negative_binomial($n, $ne, $p)"
           When  called in an  array context, returns  an array of $n  outcomes  generated  from  the   negative
           binomial  distribution  with  number   of  events $ne and  probability of an event  in each trial $p.
           When called  in  a scalar   context, generates  and  returns only  one  such  outcome  as  a  scalar,
           regardless of the value of $n.

           Argument  restrictions:  $ne  is    rounded  using  int(),  the  result must be positive.  $p must be
           between 0 and 1 exclusive.

           There are no defaults; both arguments must be provided.

       "random_noncentral_chi_square($n, $df, $nonc)"
           When called in  an array context, returns  an array  of $n deviates generated   from  the  noncentral
           chi-square  distribution with $df degrees of freedom and noncentrality  parameter $nonc.  When called
           in a scalar context, generates and returns only  one such deviate as  a  scalar,  regardless  of  the
           value of $n.

           Argument restrictions:   $df must be at  least  1, $nonc must be non-negative.

           There are no defaults; all three arguments must be provided.

       "random_noncentral_f($n, $dfn, $dfd, $nonc)"
           When  called  in  an array context, returns an  array of  $n deviates generated from the noncentral F
           (variance ratio) distribution with degrees of freedom $dfn (numerator)  and $dfd  (denominator);  and
           noncentrality  parameter  $nonc.    When  called in a  scalar context, generates and returns only one
           such deviate as a scalar, regardless of the value of $n.

           Argument restrictions:  $dfn must  be at least   1, $dfd must be positive, and  $nonc  must  be  non-
           negative.

           There are no defaults; all four arguments must be provided.

       "random_poisson($n, $mu)"
           When  called   in  an  array  context,   returns an array  of $n outcomes generated  from the Poisson
           distribution  with mean  $mu.  When called  in a  scalar   context, generates and  returns  only  one
           such outcome as a scalar, regardless of the value of $n.

           Argument restrictions: $mu must be non-negative.

           There are no defaults; both arguments must be provided.

ERROR HANDLING

       The Perl code should "croak" if bad arguments are passed or if the underlying C code  cannot allocate the
       necessary memory.  The only error which should  kill  the  job  without   "croak"ing  is  a  non-positive
       definite          variance-covariance       matrix      passed        to "random_multivarite_normal" (see
       "Extended Routines").

RANDLIB

       randlib  is available in Fortran and  C source form, and will soon be available in  Fortran90  source  as
       well.   randlib.c can be obtained from     statlib.  Send mail   whose  message   is 'send randlib.c.shar
       from general' to:

                              statlib@lib.stat.cmu.edu

       randlib.c   can  also  be    obtained    by  anonymous  ftp   to:

                         odin.mdacc.tmc.edu (143.111.62.32)

       where it is available as

                          /pub/source/randlib.c-1.3.tar.gz

       For obvious reasons, the original randlib  (in Fortran) has been renamed to

                          /pub/source/randlib.f-1.3.tar.gz

       on the same machine.

       Our FTP index is on file "./pub/index".

       If you have Internet access and a browser you might note the following web site addresses:

       University of Texas M. D. Anderson Cancer Center Home Page:

                          http://www.mdanderson.org/

       Department of Biomathematics Home Page:

                          http://odin.mdacc.tmc.edu/

       Available software:

              http://biostatistics.mdanderson.org/SoftwareDownload/

SUPPORT

       This work  was supported  in part by  grant CA-16672 from the National Cancer Institute.  We are grateful
       to Larry and  Pat McNeil of Corpus Cristi for their generous support.  Some equipment used in this effort
       was provided by IBM as part of a cooperative study agreement; we thank them.

CODE MANIPULATION

       The   C  version of  randlib  was  obtained  by  translating the original    Fortran      randlib   using
       PROMULA.FORTRAN,   and performing some hand crafting of the result.

       Information on PROMULA.FORTRAN can be obtained from:

                          PROMULA Development Corporation
                           3620 N. High Street, Suite 301
                                Columbus, Ohio 43214
                                   (614) 263-5454

       wrapper.c   (now   obsolete)    was   created    by  using SWIG,  and performing some modification of the
       result.  SWIG also produced the skeleton of Random.pm.

       Information on SWIG can be obtained from:

                          http://www.swig.org

SOURCES

       The following routines,  which  were  written by  others    and   lightly  modified  for  consistency  in
       packaging, are included in randlib.

       Bottom Level Routines
           These routines are a transliteration of the Pascal in the reference to Fortran, and thence to C.

           L'Ecuyer,  P.,  and Cote, S. "Implementing  a Random Number Package with Splitting  Facilities."  ACM
           Transactions   on Mathematical Software, 17:98-111 (1991).

       Exponential
           This code was obtained from Netlib.

           Ahrens, J. H., and Dieter, U.  "Computer  Methods  for  Sampling  from  the  Exponential  and  Normal
           Distributions."  Comm. ACM, 15,10 (Oct. 1972), 873-882.

       Gamma
           (Case R >= 1.0)

           Ahrens,  J.  H., and Dieter, U. "Generating Gamma Variates by a Modified Rejection Technique."  Comm.
           ACM, 25,1 (Jan. 1982), 47-54.  Algorithm GD

           (Case 0.0 <= R <= 1.0)

           Ahrens, J. H.,  and  Dieter, U.  "Computer Methods  for  Sampling   from  Gamma,  Beta,  Poisson  and
           Binomial Distributions."  Computing, 12 (1974), 223-246.  Adaptation of algorithm GS.

       Normal
           This code was obtained from netlib.

           Ahrens,  J.  H.,  and   Dieter,  U.   "Extensions of  Forsythe's Method for Random Sampling  from the
           Normal Distribution."  Math. Comput., 27,124 (Oct. 1973), 927-937.

       Binomial
           This code was kindly sent to Dr. Brown by Dr. Kachitvichyanukul.

           Kachitvichyanukul, V., and Schmeiser,  B. W.  "Binomial Random Variate Generation."  Comm. ACM, 31, 2
           (Feb. 1988), 216.

       Poisson
           This code was obtained from netlib.

           Ahrens, J. H., and  Dieter,  U.  "Computer  Generation  of  Poisson  Deviates  from  Modified  Normal
           Distributions."  ACM Trans.  Math. Software, 8, 2 (June 1982), 163-179.

       Beta
           This code was written by us following the recipe in the following.

           Cheng,  R.  C.  H.   "Generating   Beta  Variables  with  Nonintegral  Shape Parameters."  Comm. ACM,
           21:317-322 (1978). (Algorithms BB and BC)

       Linpack
           Routines   "SPOFA" and   "SDOT"  are   used     to  perform   the  Cholesky  decomposition  of    the
           covariance matrix  in  "SETGMN"  (used for the generation of multivariate normal deviates).

           Dongarra,  J.  J., Moler,   C.  B., Bunch, J.   R., and  Stewart, G.  W.  Linpack User's Guide.  SIAM
           Press, Philadelphia.  (1979)

       Multinomial
           The  algorithm is from  page 559  of Devroye,  Luc Non-Uniform  Random Variate Generation.  New York:
           Springer-Verlag, 1986.

       Negative Binomial
           The  algorithm is from  page 480  of Devroye,  Luc Non-Uniform  Random Variate Generation.  New York:
           Springer-Verlag, 1986.

VERSION

       This POD documents Math::Random version 0.71.

AUTHORS

Math::Random (the Perl port  of Randlib) was put  together by John Venier  and Barry  W.  Brown  with
           help from  SWIG.  For  version 0.61, Geoffrey Rommel made various cosmetic changes. Version 0.64 uses
           plain vanilla XS rather than SWIG.

       •   randlib was compiled and written  by  Barry W. Brown, James Lovato, Kathy Russell, and John Venier.

       •   Correspondence   regarding   Math::Random or   randlib should be addressed to John Venier by email to

                                 jvenier@mdanderson.org

       •   Our address is:

                           Department of Biomathematics, Box 237
                    The University of Texas, M.D. Anderson Cancer Center
                                  1515 Holcombe Boulevard
                                     Houston, TX 77030

       •   Geoffrey Rommel may be reached at grommel [at] cpan [dot] org.

LEGALITIES

       •   The  programs  in  the   Perl  code  distributed  with Math::Random and in    the C code helper.c, as
           well as  the documentation, are copyright by John  Venier and  Barry  W.  Brown for  the   University
           of  Texas  M.   D.   Anderson Cancer Center in 1997.  They may be distributed and used under the same
           conditions as Perl.

       •   randlib.c,  com.c,  and randlib.h   are from  randlib (See "RANDLIB") and are  distributed  with  the
           following legalities.

           Code that appeared  in an    ACM  publication  is subject  to    their algorithms policy:

           Submittal  of   an   algorithm     for  publication  in   one of   the  ACM Transactions implies that
           unrestricted use  of the algorithm within  a computer is permissible.   General permission   to  copy
           and   distribute  the  algorithm  without  fee  is granted provided that the copies  are not made  or
           distributed for  direct   commercial  advantage.    The ACM copyright notice and  the  title  of  the
           publication  and  its  date  appear,  and   notice  is  given  that  copying  is by permission of the
           Association for Computing Machinery.  To copy otherwise, or  to  republish,  requires  a  fee  and/or
           specific permission.

           Krogh, F.  "Algorithms Policy."  ACM  Tran.  Math.  Softw.  13 (1987), 183-186.

           Note,  however,  that  only  the  particular  expression  of an algorithm can be copyrighted, not the
           algorithm per se; see 17 USC 102(b).

           We place the Randlib code that we have written in the public domain.

       •   Math::Randlib and randlib  are distributed  with NO WARRANTY.  See "NO WARRANTY".

NO WARRANTY

       WE PROVIDE  ABSOLUTELY  NO WARRANTY  OF ANY  KIND  EITHER  EXPRESS   OR  IMPLIED,   INCLUDING  BUT    NOT
       LIMITED  TO,   THE   IMPLIED   WARRANTIES  OF  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE
       ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS  WITH YOU.   SHOULD  THIS  PROGRAM  PROVE
       DEFECTIVE, YOU ASSUME  THE COST  OF  ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

       IN  NO   EVENT   SHALL  THE  UNIVERSITY   OF TEXAS OR  ANY  OF ITS COMPONENT INSTITUTIONS INCLUDING M. D.
       ANDERSON HOSPITAL BE LIABLE  TO YOU FOR DAMAGES, INCLUDING ANY  LOST PROFITS,  LOST  MONIES,    OR  OTHER
       SPECIAL,  INCIDENTAL    OR   CONSEQUENTIAL  DAMAGES    ARISING    OUT   OF   THE  USE OR INABILITY TO USE
       (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA OR ITS ANALYSIS BEING  RENDERED INACCURATE OR   LOSSES
       SUSTAINED  BY THIRD PARTIES FROM) THE PROGRAM.

       (Above NO WARRANTY modified from the GNU NO WARRANTY statement.)

perl v5.38.2                                       2024-03-31                                        Random(3pm)