diff --git a/acb_dft.h b/acb_dft.h index cc681778..01f5ddaa 100644 --- a/acb_dft.h +++ b/acb_dft.h @@ -246,7 +246,7 @@ acb_dft_rad2_init(acb_dft_rad2_t t, int e, slong prec) ACB_DFT_INLINE void acb_dft_rad2_clear(acb_dft_rad2_t t) { - _acb_vec_clear(t->z, t->n); + _acb_vec_clear(t->z, t->nz); } void _acb_dft_bluestein_init(acb_dft_bluestein_t t, slong dv, slong n, slong prec); diff --git a/acb_dft/bluestein.c b/acb_dft/bluestein.c index 04052d2d..71197919 100644 --- a/acb_dft/bluestein.c +++ b/acb_dft/bluestein.c @@ -26,7 +26,7 @@ _acb_vec_bluestein_factors(acb_ptr z, slong n, slong prec) nmod_t n2; z2n = _acb_vec_init(2 * n); - _acb_vec_unit_roots(z2n, 2 * n, prec); + _acb_vec_unit_roots(z2n, 2 * n, -2 * n, prec); nmod_init(&n2, 2 * n); for (k = 0, k2 = 0; k < n; k++) @@ -65,6 +65,7 @@ _acb_vec_bluestein_factors(acb_ptr z, slong n, slong prec) acb_one(t + 0); acb_unit_root(t + 1, 2 * n, prec); + acb_conj(t + 1, t + 1); acb_set_si(t + n, -1); for (k = 2; k < n; k++) if (v[k]) diff --git a/acb_dft/cyc.c b/acb_dft/cyc.c index 2e922fa3..3195f218 100644 --- a/acb_dft/cyc.c +++ b/acb_dft/cyc.c @@ -27,7 +27,7 @@ _acb_dft_cyc_init_z_fac(acb_dft_cyc_t t, n_factor_t fac, slong dv, acb_ptr z, sl if (DFT_VERB) flint_printf("dft_cyc: init z[%wu]\n", t->n); z = _acb_vec_init(t->n); - _acb_vec_unit_roots(z, t->n, prec); + _acb_vec_unit_roots(z, t->n, -t->n, prec); dz = 1; t->zclear = 1; } diff --git a/acb_dft/naive.c b/acb_dft/naive.c index fba1e4f1..9dabe1a6 100644 --- a/acb_dft/naive.c +++ b/acb_dft/naive.c @@ -57,7 +57,7 @@ acb_dft_naive(acb_ptr w, acb_srcptr v, slong len, slong prec) acb_ptr z, v1 = NULL; z = _acb_vec_init(len); - _acb_vec_unit_roots(z, len, prec); + _acb_vec_unit_roots(z, len, -len, prec); if (w == v) { v1 = _acb_vec_init(len); @@ -84,7 +84,7 @@ _acb_dft_naive_init(acb_dft_naive_t pol, slong dv, acb_ptr z, slong dz, slong le if (DFT_VERB) flint_printf("dft_naive: init z[%ld]\n",len); pol->z = _acb_vec_init(len); - _acb_vec_unit_roots(pol->z, len, prec); + _acb_vec_unit_roots(pol->z, len, -len, prec); pol->dz = 1; pol->zclear = 1; } diff --git a/acb_dft/rad2.c b/acb_dft/rad2.c index d8883d37..767c7a65 100644 --- a/acb_dft/rad2.c +++ b/acb_dft/rad2.c @@ -43,10 +43,9 @@ _acb_dft_rad2_init(acb_dft_rad2_t t, slong dv, int e, slong prec) t->n = 1 << e; t->dv = dv; t->nz = t->n >> 1; - t->z = _acb_vec_init(t->n); + t->z = _acb_vec_init(t->nz); /* set n/2 roots of order n */ - /* xxx: don't compute twice the number */ - _acb_vec_unit_roots(t->z, t->n, prec); + _acb_vec_unit_roots(t->z, t->nz, -t->n, prec); } /* remark: can use same rad2 with smaller power of 2 */ diff --git a/acb_dft/test/t-convol.c b/acb_dft/test/t-convol.c index e05278ba..e81bae4e 100644 --- a/acb_dft/test/t-convol.c +++ b/acb_dft/test/t-convol.c @@ -86,8 +86,13 @@ int main() for (i = 0; i < len; i++) { - acb_set_si(x + i, n_randint(state, len)); - acb_set_si(y + i, n_randint(state, len)); +#if 1 + acb_set_si(x + i, n_randint(state, 4 * len)); + acb_set_si(y + i, n_randint(state, 4 * len)); +#else + acb_set_si_si(x + i, n_randint(state, 4 * len), n_randint(state, 4 * len)); + acb_set_si_si(y + i, n_randint(state, 4 * len), n_randint(state, 4 * len)); +#endif } for (f = 0; f < nf; f++) @@ -115,5 +120,3 @@ int main() flint_printf("PASS\n"); return EXIT_SUCCESS; } - - diff --git a/acb_dft/test/t-dft.c b/acb_dft/test/t-dft.c index c5a4e1f5..0afe29fb 100644 --- a/acb_dft/test/t-dft.c +++ b/acb_dft/test/t-dft.c @@ -133,7 +133,7 @@ int main() w1 = _acb_vec_init(n); for (j = 0; j < n; j++) - acb_set_si(v + k, k); + acb_set_si_si(v + j, j, j + 2); acb_dft_naive(w1, v, n, prec); acb_dft_rad2_inplace(w2, k, prec);