LAPACK 3.3.0

dlarnd.f

Go to the documentation of this file.
00001       DOUBLE PRECISION FUNCTION DLARND( IDIST, ISEED )
00002 *
00003 *  -- LAPACK auxiliary routine (version 3.1) --
00004 *     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
00005 *     November 2006
00006 *
00007 *     .. Scalar Arguments ..
00008       INTEGER            IDIST
00009 *     ..
00010 *     .. Array Arguments ..
00011       INTEGER            ISEED( 4 )
00012 *     ..
00013 *
00014 *  Purpose
00015 *  =======
00016 *
00017 *  DLARND returns a random real number from a uniform or normal
00018 *  distribution.
00019 *
00020 *  Arguments
00021 *  =========
00022 *
00023 *  IDIST   (input) INTEGER
00024 *          Specifies the distribution of the random numbers:
00025 *          = 1:  uniform (0,1)
00026 *          = 2:  uniform (-1,1)
00027 *          = 3:  normal (0,1)
00028 *
00029 *  ISEED   (input/output) INTEGER array, dimension (4)
00030 *          On entry, the seed of the random number generator; the array
00031 *          elements must be between 0 and 4095, and ISEED(4) must be
00032 *          odd.
00033 *          On exit, the seed is updated.
00034 *
00035 *  Further Details
00036 *  ===============
00037 *
00038 *  This routine calls the auxiliary routine DLARAN to generate a random
00039 *  real number from a uniform (0,1) distribution. The Box-Muller method
00040 *  is used to transform numbers from a uniform to a normal distribution.
00041 *
00042 *  =====================================================================
00043 *
00044 *     .. Parameters ..
00045       DOUBLE PRECISION   ONE, TWO
00046       PARAMETER          ( ONE = 1.0D+0, TWO = 2.0D+0 )
00047       DOUBLE PRECISION   TWOPI
00048       PARAMETER          ( TWOPI = 6.2831853071795864769252867663D+0 )
00049 *     ..
00050 *     .. Local Scalars ..
00051       DOUBLE PRECISION   T1, T2
00052 *     ..
00053 *     .. External Functions ..
00054       DOUBLE PRECISION   DLARAN
00055       EXTERNAL           DLARAN
00056 *     ..
00057 *     .. Intrinsic Functions ..
00058       INTRINSIC          COS, LOG, SQRT
00059 *     ..
00060 *     .. Executable Statements ..
00061 *
00062 *     Generate a real random number from a uniform (0,1) distribution
00063 *
00064       T1 = DLARAN( ISEED )
00065 *
00066       IF( IDIST.EQ.1 ) THEN
00067 *
00068 *        uniform (0,1)
00069 *
00070          DLARND = T1
00071       ELSE IF( IDIST.EQ.2 ) THEN
00072 *
00073 *        uniform (-1,1)
00074 *
00075          DLARND = TWO*T1 - ONE
00076       ELSE IF( IDIST.EQ.3 ) THEN
00077 *
00078 *        normal (0,1)
00079 *
00080          T2 = DLARAN( ISEED )
00081          DLARND = SQRT( -TWO*LOG( T1 ) )*COS( TWOPI*T2 )
00082       END IF
00083       RETURN
00084 *
00085 *     End of DLARND
00086 *
00087       END
 All Files Functions