Skip to content

rcond is 0 for NaN matrix in lapack-3.11 #763

Closed
@dasergatskov

Description

@dasergatskov

Description
rcond for matrix of NaN values returns 0 while it should (and used to in previous version) return NaN
Checklist

  • I've included a minimal example to reproduce the issue

This came up as a bug in octave: https://savannah.gnu.org/bugs/?63384
With the fortran test file (attached):

$ gfortran bug-63384.f -llapack -lblas

$ ./a.out 
 x = 
                       NaN                       NaN
                       NaN                       NaN
 anorm =                        NaN
 dgetrf info:            0
 ipiv = 
           1           2
 dgecon info:            0
 rcond =    0.0000000000000000     
 dgetri info:            0
 xinv = 
                       NaN                       NaN
                       NaN                       NaN
$ LD_PRELOAD=/usr/lib64/libopenblaso.so.0 ./a.out 
 x = 
                       NaN                       NaN
                       NaN                       NaN
 anorm =                        NaN
 dgetrf info:            0
 ipiv = 
           1           2
 dgecon info:            0
 rcond =                        NaN
 dgetri info:            0
 xinv = 
                       NaN                       NaN
                       NaN                       NaN

Openblas is 0.3.21 and is linked with lapack 3.10.1

$ cat bug-63384.f 
      program main
      implicit none
      double precision zero, nan, x(2,2)
      integer i, j, ipiv(2), iwork(2), info
      double precision work(8), anorm, rcond
      rcond = -1.234567
      zero = 0.0
      nan = zero / zero
      anorm = nan
      do j = 1, 2
        ipiv(j) = -j
        do i = 1, 2
          x(i,j) = nan
        enddo
      enddo
      print *, 'x = '
      do i = 1, 2
        print *, x(i,1), x(i,2)
      enddo
      print *, 'anorm = ', anorm
      call dgetrf (2, 2, x, 2, ipiv, info);
      print *, 'dgetrf info: ', info
      print *, 'ipiv = '
      print *, ipiv(1), ipiv(2)
      call dgecon ('1', 2, x, 2, anorm, rcond, work, iwork, info)
      print *, 'dgecon info: ', info
      print *, 'rcond = ', rcond
      call dgetri (2, x, 2, ipiv, work, 8, info)
      print *, 'dgetri info: ', info
      print *, 'xinv = '
      do i = 1, 2
        print *, x(i,1), x(i,2)
      enddo
      end

Dmitri.
p.s. tagging @mmuetzel
bug-63384.f.gz

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions