### DLAED6 - is a recent fix correct?

Posted:

**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

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