94 SUBROUTINE dlarnv( IDIST, ISEED, N, X )
105 DOUBLE PRECISION X( * )
111 DOUBLE PRECISION ONE, TWO
112 parameter( one = 1.0d+0, two = 2.0d+0 )
114 parameter( lv = 128 )
115 DOUBLE PRECISION TWOPI
116 parameter( twopi = 6.28318530717958647692528676655900576839d+0 )
119 INTEGER I, IL, IL2, IV
122 DOUBLE PRECISION U( LV )
125 INTRINSIC cos, log, min, sqrt
132 DO 40 iv = 1, n, lv / 2
133 il = min( lv / 2, n-iv+1 )
134 IF( idist.EQ.3 )
THEN
143 CALL dlaruv( iseed, il2, u )
145 IF( idist.EQ.1 )
THEN
152 ELSE IF( idist.EQ.2 )
THEN
157 x( iv+i-1 ) = two*u( i ) - one
159 ELSE IF( idist.EQ.3 )
THEN
164 x( iv+i-1 ) = sqrt( -two*log( u( 2*i-1 ) ) )*
165 $ cos( twopi*u( 2*i ) )
subroutine dlarnv(idist, iseed, n, x)
DLARNV returns a vector of random numbers from a uniform or normal distribution.
subroutine dlaruv(iseed, n, x)
DLARUV returns a vector of n random real numbers from a uniform distribution.