@@ -518,13 +518,17 @@ SUBROUTINE CHGEQZ( JOB, COMPQ, COMPZ, N, ILO, IHI, H, LDH, T, LDT,
518518 IF ( ILAST.EQ. ILO ) THEN
519519 GO TO 60
520520 ELSE
521- IF ( ABS1( H( ILAST, ILAST-1 ) ).LE. ATOL ) THEN
521+ IF ( ABS1( H( ILAST, ILAST-1 ) ).LE. MAX ( SAFMIN, ULP* (
522+ $ ABS1( H( ILAST, ILAST ) ) + ABS1( H( ILAST-1 , ILAST-1 )
523+ $ ) ) ) ) THEN
522524 H( ILAST, ILAST-1 ) = CZERO
523525 GO TO 60
524526 END IF
525527 END IF
526528*
527- IF ( ABS ( T( ILAST, ILAST ) ).LE. BTOL ) THEN
529+ IF ( ABS ( T( ILAST, ILAST ) ).LE. MAX ( SAFMIN, ULP* (
530+ $ ABS ( T( ILAST - 1 , ILAST ) ) + ABS ( T( ILAST-1 , ILAST-1 )
531+ $ ) ) ) ) THEN
528532 T( ILAST, ILAST ) = CZERO
529533 GO TO 50
530534 END IF
@@ -538,7 +542,9 @@ SUBROUTINE CHGEQZ( JOB, COMPQ, COMPZ, N, ILO, IHI, H, LDH, T, LDT,
538542 IF ( J.EQ. ILO ) THEN
539543 ILAZRO = .TRUE.
540544 ELSE
541- IF ( ABS1( H( J, J-1 ) ).LE. ATOL ) THEN
545+ IF ( ABS1( H( J, J-1 ) ).LE. MAX ( SAFMIN, ULP* (
546+ $ ABS1( H( J, J ) ) + ABS1( H( J-1 , J-1 ) )
547+ $ ) ) ) THEN
542548 H( J, J-1 ) = CZERO
543549 ILAZRO = .TRUE.
544550 ELSE
@@ -548,7 +554,10 @@ SUBROUTINE CHGEQZ( JOB, COMPQ, COMPZ, N, ILO, IHI, H, LDH, T, LDT,
548554*
549555* Test 2: for T(j,j)=0
550556*
551- IF ( ABS ( T( J, J ) ).LT. BTOL ) THEN
557+ TEMP = ABS ( T( J, J + 1 ) )
558+ IF ( J .GT. ILO )
559+ $ TEMP = TEMP + ABS ( T( J - 1 , J ) )
560+ IF ( ABS ( T( J, J ) ).LT. MAX ( SAFMIN,ULP* TEMP ) ) THEN
552561 T( J, J ) = CZERO
553562*
554563* Test 1a: Check for 2 consecutive small subdiagonals in A
0 commit comments