1 SUBROUTINE zlacn2( N, V, X, EST, KASE, ISAVE )
13 COMPLEX*16 v( * ), x( * )
77 parameter( itmax = 5 )
78 DOUBLE PRECISION one, two
79 parameter( one = 1.0d0, two = 2.0d0 )
80 COMPLEX*16 czero, cone
81 parameter( czero = ( 0.0d0, 0.0d0 ),
82 $ cone = ( 1.0d0, 0.0d0 ) )
86 DOUBLE PRECISION absxi, altsgn, estold, safmin, temp
90 DOUBLE PRECISION dlamch,
dzsum1
97 INTRINSIC abs, dble, dcmplx, dimag
101 safmin = dlamch(
'Safe minimum' )
104 x( i ) = dcmplx( one / dble( n ) )
111 go to( 20, 40, 70, 90, 120 )isave( 1 )
126 absxi = abs( x( i ) )
127 IF( absxi.GT.safmin )
THEN
128 x( i ) = dcmplx( dble( x( i ) ) / absxi,
129 $ dimag( x( i ) ) / absxi )
142 isave( 2 ) =
izmax1( n, x, 1 )
151 x( isave( 2 ) ) = cone
160 CALL zcopy( n, x, 1, v, 1 )
169 absxi = abs( x( i ) )
170 IF( absxi.GT.safmin )
THEN
171 x( i ) = dcmplx( dble( x( i ) ) / absxi,
172 $ dimag( x( i ) ) / absxi )
186 isave( 2 ) =
izmax1( n, x, 1 )
187 IF( ( abs( x( jlast ) ).NE.abs( x( isave( 2 ) ) ) ) .AND.
188 $ ( isave( 3 ).LT.itmax ) )
THEN
189 isave( 3 ) = isave( 3 ) + 1
198 x( i ) = dcmplx( altsgn*( one+dble( i-1 ) / dble( n-1 ) ) )
209 temp = two*(
dzsum1( n, x, 1 ) / dble( 3*n ) )
210 IF( temp.GT.est )
THEN
211 CALL zcopy( n, x, 1, v, 1 )