modifications. I believe that in the complex case, when NORMX = ZERO but ALPHI
is not ZERO (i.e. ALPHA has a complex imaginary part), then TAU needs to be
such that:
" ( 1 - TAU ) * ( ALPHA ) = ABS( ALPHA ) "
Since we have
ALPHR = REAL( ALPHA )
ALPHI = AIMAG( ALPHA )
XNORM = DLAPY2( ALPHR, ALPHI )
The way to do this is to set TAU with
TAU = CMPLX( ONE - ALPHR / XNORM, ALPHI / XNORM )
as opposed to
TAU = CMPLX( ONE - ALPHR / XNORM, -ALPHI / XNORM )
(Note: XNORM is used as temporary variable here)
ELSE
* Only "reflecting" the diagonal entry to be real and non-negative.
XNORM = SLAPY2( ALPHR, ALPHI )
- TAU = CMPLX( ONE - ALPHR / XNORM, -ALPHI / XNORM )
+ TAU = CMPLX( ONE - ALPHR / XNORM, ALPHI / XNORM )
DO J = 1, N-1
X( 1 + (J-1)*INCX ) = ZERO
END DO
ELSE
* Only "reflecting" the diagonal entry to be real and non-negative.
XNORM = DLAPY2( ALPHR, ALPHI )
- TAU = DCMPLX( ONE - ALPHR / XNORM, -ALPHI / XNORM )
+ TAU = DCMPLX( ONE - ALPHR / XNORM, ALPHI / XNORM )
DO J = 1, N-1
X( 1 + (J-1)*INCX ) = ZERO
END DO