Fixed bug for aliased mat_mul of window matrices

This commit is contained in:
David Berghaus 2021-03-23 18:32:37 +01:00
parent 9c240a1e69
commit 190cd45130
10 changed files with 27 additions and 7 deletions

View file

@ -66,6 +66,16 @@ acb_mat_swap(acb_mat_t mat1, acb_mat_t mat2)
*mat2 = t;
}
ACB_MAT_INLINE void
acb_mat_swap_entrywise(acb_mat_t mat1, acb_mat_t mat2)
{
slong i, j;
for (i = 0; i < acb_mat_nrows(mat1); i++)
for (j = 0; j < acb_mat_ncols(mat1); j++)
acb_swap(acb_mat_entry(mat2, i, j), acb_mat_entry(mat1, i, j));
}
/* Window matrices */
void acb_mat_window_init(acb_mat_t window, const acb_mat_t mat, slong r1, slong c1, slong r2, slong c2);

View file

@ -38,7 +38,7 @@ acb_mat_approx_mul_classical(acb_mat_t C, const acb_mat_t A, const acb_mat_t B,
acb_mat_t T;
acb_mat_init(T, ar, bc);
acb_mat_approx_mul_classical(T, A, B, prec);
acb_mat_swap(T, C);
acb_mat_swap_entrywise(T, C);
acb_mat_clear(T);
return;
}

View file

@ -45,7 +45,7 @@ acb_mat_mul_classical(acb_mat_t C, const acb_mat_t A, const acb_mat_t B, slong p
acb_mat_t T;
acb_mat_init(T, ar, bc);
acb_mat_mul_classical(T, A, B, prec);
acb_mat_swap(T, C);
acb_mat_swap_entrywise(T, C);
acb_mat_clear(T);
return;
}

View file

@ -87,7 +87,7 @@ acb_mat_mul_threaded(acb_mat_t C, const acb_mat_t A, const acb_mat_t B, slong pr
acb_mat_t T;
acb_mat_init(T, ar, bc);
acb_mat_mul_threaded(T, A, B, prec);
acb_mat_swap(T, C);
acb_mat_swap_entrywise(T, C);
acb_mat_clear(T);
return;
}

View file

@ -64,6 +64,16 @@ arb_mat_swap(arb_mat_t mat1, arb_mat_t mat2)
*mat2 = t;
}
ARB_MAT_INLINE void
arb_mat_swap_entrywise(arb_mat_t mat1, arb_mat_t mat2)
{
slong i, j;
for (i = 0; i < arb_mat_nrows(mat1); i++)
for (j = 0; j < arb_mat_ncols(mat1); j++)
arb_swap(arb_mat_entry(mat2, i, j), arb_mat_entry(mat1, i, j));
}
/* Window matrices */
void arb_mat_window_init(arb_mat_t window, const arb_mat_t mat, slong r1, slong c1, slong r2, slong c2);

View file

@ -31,7 +31,7 @@ arb_mat_approx_mul_classical(arb_mat_t C, const arb_mat_t A, const arb_mat_t B,
arb_mat_t T;
arb_mat_init(T, ar, bc);
arb_mat_approx_mul_classical(T, A, B, prec);
arb_mat_swap(T, C);
arb_mat_swap_entrywise(T, C);
arb_mat_clear(T);
return;
}

View file

@ -238,7 +238,7 @@ arb_mat_mul_block(arb_mat_t C, const arb_mat_t A, const arb_mat_t B, slong prec)
arb_mat_t T;
arb_mat_init(T, M, P);
arb_mat_mul_block(T, A, B, prec);
arb_mat_swap(T, C);
arb_mat_swap_entrywise(T, C);
arb_mat_clear(T);
return;
}

View file

@ -45,7 +45,7 @@ arb_mat_mul_classical(arb_mat_t C, const arb_mat_t A, const arb_mat_t B, slong p
arb_mat_t T;
arb_mat_init(T, ar, bc);
arb_mat_mul_classical(T, A, B, prec);
arb_mat_swap(T, C);
arb_mat_swap_entrywise(T, C);
arb_mat_clear(T);
return;
}

View file

@ -87,7 +87,7 @@ arb_mat_mul_threaded(arb_mat_t C, const arb_mat_t A, const arb_mat_t B, slong pr
arb_mat_t T;
arb_mat_init(T, ar, bc);
arb_mat_mul_threaded(T, A, B, prec);
arb_mat_swap(T, C);
arb_mat_swap_entrywise(T, C);
arb_mat_clear(T);
return;
}

0
stBhzi4B Normal file
View file