diff options
author | langou <langou@users.noreply.github.com> | 2010-06-22 22:08:36 +0000 |
---|---|---|
committer | langou <langou@users.noreply.github.com> | 2010-06-22 22:08:36 +0000 |
commit | 9d2ac5bb4d35890a66f0eaa48935de14366c8c9c (patch) | |
tree | 514a3001c4ec067a5b395a29bd74825981d15c33 | |
parent | cc91ce19dc8454d2129df767cadc8fa22dc7ba43 (diff) | |
download | lapack-9d2ac5bb4d35890a66f0eaa48935de14366c8c9c.tar.gz lapack-9d2ac5bb4d35890a66f0eaa48935de14366c8c9c.tar.bz2 lapack-9d2ac5bb4d35890a66f0eaa48935de14366c8c9c.zip |
Corrected a bug in SBDSDC and DBDSDC.
The routine was returning with INFO = 0 while a failure of convergence should
have been reported with INFO > 0.
The bug has been around for quite a while and has been difficult to reproduce.
More information:
(*) bug0025 :: serious problem in DGESDD: DGESDD returns negative singular values with INFO = 0
o reported by Guy Bencteux on Sat Dec 06 2008
o see forum topic 847
o Julie : CANNOT REPRODUCE THE PROBLEM
o on Sat Jun 19 2010, Bruno Pinçon from ESIAL, reported another matrix with the same problems
o see forum topic 1868
o we can reproduce the problem with on MacOS with gfortran reference LAPACK
and vecLib BLAS, we can not reproduce the problem with reference LAPACK and reference BLAS.
o A patch has been proposed by Julien Langou. (See forum topic 1868.)
o Under review by other lapackers.
o Note: there is strong evidence that the bug of Guy Bencteux and this one
are the same, although we were never able to reproduce Guy's problem. So
we assume Guy's problem gone! (And send an email to Guy to inform him.)
-rw-r--r-- | SRC/dbdsdc.f | 6 | ||||
-rw-r--r-- | SRC/sbdsdc.f | 6 |
2 files changed, 6 insertions, 6 deletions
diff --git a/SRC/dbdsdc.f b/SRC/dbdsdc.f index 40185268..0af80cbd 100644 --- a/SRC/dbdsdc.f +++ b/SRC/dbdsdc.f @@ -368,9 +368,9 @@ $ Q( START+( IC+QSTART-2 )*N ), $ Q( START+( IS+QSTART-2 )*N ), $ WORK( WSTART ), IWORK, INFO ) - IF( INFO.NE.0 ) THEN - RETURN - END IF + END IF + IF( INFO.NE.0 ) THEN + RETURN END IF START = I + 1 END IF diff --git a/SRC/sbdsdc.f b/SRC/sbdsdc.f index 31c51a4f..58f08f59 100644 --- a/SRC/sbdsdc.f +++ b/SRC/sbdsdc.f @@ -367,9 +367,9 @@ $ Q( START+( IC+QSTART-2 )*N ), $ Q( START+( IS+QSTART-2 )*N ), $ WORK( WSTART ), IWORK, INFO ) - IF( INFO.NE.0 ) THEN - RETURN - END IF + END IF + IF( INFO.NE.0 ) THEN + RETURN END IF START = I + 1 END IF |