Skip to content
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/generic.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1846,7 +1846,7 @@ julia> det(BigInt[1 0; 2 2]) # exact integer determinant
function det(A::AbstractMatrix{T}) where {T}
if istriu(A) || istril(A)
S = promote_type(T, typeof((one(T)*zero(T) + zero(T))/one(T)))
return convert(S, det(UpperTriangular(A)))
return prod(Base.Fix1(convert, S), @view A[diagind(A)])
end
return det(lu(A; check = false))
end
Expand Down
13 changes: 13 additions & 0 deletions test/generic.jl
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ using Main.LinearAlgebraTestHelpers.OffsetArrays
using Main.LinearAlgebraTestHelpers.DualNumbers
using Main.LinearAlgebraTestHelpers.FillArrays
using Main.LinearAlgebraTestHelpers.SizedArrays
using Main.LinearAlgebraTestHelpers.Furlongs

Random.seed!(123)

Expand Down Expand Up @@ -96,6 +97,18 @@ n = 5 # should be odd
@testset "det with nonstandard Number type" begin
elty <: Real && @test det(Dual.(triu(A), zero(A))) isa Dual
end
if elty <: Int
@testset "det no overflow - triangular" begin
A = diagm([typemax(elty), typemax(elty)])
@test det(A) ≈ det(float(A))
end
end
@testset "det with units - triangular" begin
for dim in 1:10
A = diagm(Furlong.(ones(elty, dim)))
@test det(A) == Furlong{dim}(one(elty))
end
end
end

@testset "diag" begin
Expand Down