Skip to content

Commit dcc1aae

Browse files
committed
Avoid accesing A.data and B.data directly
My previous code produced wrong results when A and B were symmetric block matrices, because they accessed the raw data in a way that only works if A and B are symmetric matrices of numbers.
1 parent 738b89a commit dcc1aae

1 file changed

Lines changed: 6 additions & 6 deletions

File tree

stdlib/LinearAlgebra/src/symmetric.jl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -424,15 +424,15 @@ function dot(A::Symmetric, B::Symmetric)
424424
@inbounds if A.uplo == 'U' && B.uplo == 'U'
425425
for j in 1:n
426426
for i in 1:(j - 1)
427-
dotprod += 2 * dot(A.data[i, j], B.data[i, j])
427+
dotprod += 2 * dot(A[i, j], B[i, j])
428428
end
429-
dotprod += dot(A.data[j, j], B.data[j, j])
429+
dotprod += dot(A[j, j], B[j, j])
430430
end
431431
elseif A.uplo == 'L' && B.uplo == 'L'
432432
for j in 1:n
433-
dotprod += dot(A.data[j, j], B.data[j, j])
433+
dotprod += dot(A[j, j], B[j, j])
434434
for i in (j + 1):n
435-
dotprod += 2 * dot(A.data[i, j], B.data[i, j])
435+
dotprod += 2 * dot(A[i, j], B[i, j])
436436
end
437437
end
438438
else
@@ -441,9 +441,9 @@ function dot(A::Symmetric, B::Symmetric)
441441
end
442442
for j in 1:n
443443
for i in 1:(j - 1)
444-
dotprod += 2 * dot(A.data[i, j], B.data[j, i])
444+
dotprod += 2 * dot(A[i, j], B[j, i])
445445
end
446-
dotprod += dot(A.data[j, j], B.data[j, j])
446+
dotprod += dot(A[j, j], B[j, j])
447447
end
448448
end
449449
return dotprod

0 commit comments

Comments
 (0)