mirror of
https://github.com/vale981/arb
synced 2025-03-04 08:51:40 -05:00
Fixed bug for aliased mat_mul of window matrices
This commit is contained in:
parent
9c240a1e69
commit
190cd45130
10 changed files with 27 additions and 7 deletions
10
acb_mat.h
10
acb_mat.h
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
10
arb_mat.h
10
arb_mat.h
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
0
stBhzi4B
Normal file
Loading…
Add table
Reference in a new issue