1 SUBROUTINE dlacn2( N, V, X, ISGN, EST, KASE, ISAVE )
12 INTEGER isgn( * ), isave( 3 )
13 DOUBLE PRECISION v( * ), x( * )
77 parameter( itmax = 5 )
78 DOUBLE PRECISION zero, one, two
79 parameter( zero = 0.0d+0, one = 1.0d+0, two = 2.0d+0 )
83 DOUBLE PRECISION altsgn, estold, temp
87 DOUBLE PRECISION dasum
88 EXTERNAL idamax, dasum
94 INTRINSIC abs, dble, nint, sign
100 x( i ) = one / dble( n )
107 go to( 20, 40, 70, 110, 140 )isave( 1 )
119 est = dasum( n, x, 1 )
122 x( i ) = sign( one, x( i ) )
123 isgn( i ) = nint( x( i ) )
133 isave( 2 ) = idamax( n, x, 1 )
142 x( isave( 2 ) ) = one
151 CALL dcopy( n, x, 1, v, 1 )
153 est = dasum( n, v, 1 )
155 IF( nint( sign( one, x( i ) ) ).NE.isgn( i ) )
167 x( i ) = sign( one, x( i ) )
168 isgn( i ) = nint( x( i ) )
179 isave( 2 ) = idamax( n, x, 1 )
180 IF( ( x( jlast ).NE.abs( x( isave( 2 ) ) ) ) .AND.
181 $ ( isave( 3 ).LT.itmax ) )
THEN
182 isave( 3 ) = isave( 3 ) + 1
191 x( i ) = altsgn*( one+dble( i-1 ) / dble( n-1 ) )
202 temp = two*( dasum( n, x, 1 ) / dble( 3*n ) )
203 IF( temp.GT.est )
THEN
204 CALL dcopy( n, x, 1, v, 1 )