Correction reported by Elena (Oracle)
authorjulie <julielangou@users.noreply.github.com>
Fri, 6 Mar 2015 04:31:28 +0000 (04:31 +0000)
committerjulie <julielangou@users.noreply.github.com>
Fri, 6 Mar 2015 04:31:28 +0000 (04:31 +0000)
LAPACK 3.5.0 [cz]hgeqz.f compute eigenvalues differently depending on whether
eigenvectors are requested or not. Since the computation is different, eigenvalues
are not bit-by-bit identical whether eigenvectors are requested or not.

This fix enables to have [cz]hgeqz.f behaving more of the same whether eigenvectors
are requested or not.

Note: The fact that eigenvalues are bit-by-bit identical whether eigenvectors are
requested or not is checked in the LAPACK test suite.

SRC/chgeqz.f
SRC/zhgeqz.f

index 3209c2c..7d2e810 100644 (file)
                CALL CSCAL( J-1, SIGNBC, T( 1, J ), 1 )
                CALL CSCAL( J, SIGNBC, H( 1, J ), 1 )
             ELSE
-               H( J, J ) = H( J, J )*SIGNBC
+               CALL CSCAL( 1, SIGNBC, H( J, J ), 1 )
             END IF
             IF( ILZ )
      $         CALL CSCAL( N, SIGNBC, Z( 1, J ), 1 )
                CALL CSCAL( ILAST+1-IFRSTM, SIGNBC, H( IFRSTM, ILAST ),
      $                     1 )
             ELSE
-               H( ILAST, ILAST ) = H( ILAST, ILAST )*SIGNBC
+               CALL CSCAL( ILAST, SIGNBC, H( ILAST, ILAST ), 1 )
             END IF
             IF( ILZ )
      $         CALL CSCAL( N, SIGNBC, Z( 1, ILAST ), 1 )
                CALL CSCAL( J-1, SIGNBC, T( 1, J ), 1 )
                CALL CSCAL( J, SIGNBC, H( 1, J ), 1 )
             ELSE
-               H( J, J ) = H( J, J )*SIGNBC
+               CALL CSCAL( 1, SIGNBC, H( J, J ), 1 )
             END IF
             IF( ILZ )
      $         CALL CSCAL( N, SIGNBC, Z( 1, J ), 1 )
index 3f28131..3df6754 100644 (file)
                CALL ZSCAL( J-1, SIGNBC, T( 1, J ), 1 )
                CALL ZSCAL( J, SIGNBC, H( 1, J ), 1 )
             ELSE
-               H( J, J ) = H( J, J )*SIGNBC
+               CALL ZSCAL( 1, SIGNBC, H( J, J ), 1 )
             END IF
             IF( ILZ )
      $         CALL ZSCAL( N, SIGNBC, Z( 1, J ), 1 )
                CALL ZSCAL( ILAST+1-IFRSTM, SIGNBC, H( IFRSTM, ILAST ),
      $                     1 )
             ELSE
-               H( ILAST, ILAST ) = H( ILAST, ILAST )*SIGNBC
+               CALL ZSCAL( ILAST, SIGNBC, H( ILAST, ILAST ), 1 )
             END IF
             IF( ILZ )
      $         CALL ZSCAL( N, SIGNBC, Z( 1, ILAST ), 1 )
                CALL ZSCAL( J-1, SIGNBC, T( 1, J ), 1 )
                CALL ZSCAL( J, SIGNBC, H( 1, J ), 1 )
             ELSE
-               H( J, J ) = H( J, J )*SIGNBC
+               CALL ZSCAL( 1, SIGNBC, H( J, J ), 1 )
             END IF
             IF( ILZ )
      $         CALL ZSCAL( N, SIGNBC, Z( 1, J ), 1 )