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.)