File tree Expand file tree Collapse file tree 2 files changed +14
-1
lines changed Expand file tree Collapse file tree 2 files changed +14
-1
lines changed Original file line number Diff line number Diff line change @@ -1846,7 +1846,7 @@ julia> det(BigInt[1 0; 2 2]) # exact integer determinant
18461846function det (A:: AbstractMatrix{T} ) where {T}
18471847 if istriu (A) || istril (A)
18481848 S = promote_type (T, typeof ((one (T)* zero (T) + zero (T))/ one (T)))
1849- return convert (S, det ( UpperTriangular (A) ))
1849+ return prod (Base . Fix1 (convert, S), @view A[ diagind (A)]; init = one (S ))
18501850 end
18511851 return det (lu (A; check = false ))
18521852end
Original file line number Diff line number Diff line change @@ -17,6 +17,7 @@ using Main.LinearAlgebraTestHelpers.OffsetArrays
1717using Main. LinearAlgebraTestHelpers. DualNumbers
1818using Main. LinearAlgebraTestHelpers. FillArrays
1919using Main. LinearAlgebraTestHelpers. SizedArrays
20+ using Main. LinearAlgebraTestHelpers. Furlongs
2021
2122Random. seed! (123 )
2223
@@ -96,6 +97,18 @@ n = 5 # should be odd
9697 @testset " det with nonstandard Number type" begin
9798 elty <: Real && @test det (Dual .(triu (A), zero (A))) isa Dual
9899 end
100+ if elty <: Int
101+ @testset " det no overflow - triangular" begin
102+ A = diagm ([typemax (elty), typemax (elty)])
103+ @test det (A) == det (float (A))
104+ end
105+ end
106+ @testset " det with units - triangular" begin
107+ for dim in 0 : 4
108+ A = diagm (Furlong .(ones (elty, dim)))
109+ @test det (A) == Furlong {dim} (one (elty))
110+ end
111+ end
99112end
100113
101114@testset " diag" begin
You can’t perform that action at this time.
0 commit comments