DLAED6 - is a recent fix correct?

Post here if you have a question about LAPACK or ScaLAPACK algorithm or data format

DLAED6 - is a recent fix correct?

Postby volkerblum » Wed Sep 12, 2012 5:54 pm

DLAED6 contains the following recent modification:

FC = ZERO
ERRETM = ZERO
DF = ZERO
DDF = ZERO
DO 40 I = 1, 3
IF ( ( DSCALE( I )-TAU ).NE.ZERO ) THEN
TEMP = ONE / ( DSCALE( I )-TAU )
TEMP1 = ZSCALE( I )*TEMP
TEMP2 = TEMP1*TEMP
TEMP3 = TEMP2*TEMP
TEMP4 = TEMP1 / DSCALE( I )
FC = FC + TEMP4
ERRETM = ERRETM + ABS( TEMP4 )
DF = DF + TEMP2
DDF = DDF + TEMP3
ELSE
GO TO 60
END IF
40 CONTINUE

The "if" is new and apparently fixes a floating point exception that I have been trying to track down.

So far, so good. However, "go to 60" means that the routine exits correctly (info=0), when in fact the variable tau is equal to one of the poles of the function - of which we are trying to find a root.

Would anyone know whether this behavior is correct? I am happy to take the fix at face value, but a pole is not a root - returning with this value of tau seems odd. What am I missing?

My original suspicion was that D(I)=Tau should never happen unless something else went wrong before the dlaed6 call, e.g., a compiler bug, an over-optimistically compiled dlamch, or similar. That was just a hunch, though.

Any comments appreciated.

best wishes
VB
volkerblum
 
Posts: 2
Joined: Wed Sep 12, 2012 5:31 pm

Return to Algorithm / Data

Who is online

Users browsing this forum: No registered users and 2 guests