diff --git a/src/diagonal.jl b/src/diagonal.jl index ec1cd89c..280caec1 100644 --- a/src/diagonal.jl +++ b/src/diagonal.jl @@ -1024,8 +1024,8 @@ function svd(D::Diagonal{T}) where {T<:Number} Vt = copy(U) for i in 1:length(d) j = piv[i] - U[j,i] = d[j] / S[i] - Vt[i,j] = one(Td) + U[j,i] = iszero(d[j]) ? oneunit(Td) : d[j] / S[i] + Vt[i,j] = oneunit(Td) end return SVD(U, S, Vt) end diff --git a/test/diagonal.jl b/test/diagonal.jl index c29728b5..1cd2e9df 100644 --- a/test/diagonal.jl +++ b/test/diagonal.jl @@ -463,7 +463,8 @@ Random.seed!(1) end end - @testset "svd (#11120/#11247)" begin + @testset "svd (#11120/#11247/#1149)" begin + D[1] = 0 U, s, V = svd(D) @test (U*Diagonal(s))*V' ≈ D @test svdvals(D) == s