diff --git a/acb_dft.h b/acb_dft.h index 91cb6377..17b430c4 100644 --- a/acb_dft.h +++ b/acb_dft.h @@ -262,9 +262,12 @@ acb_dft_bluestein_init(acb_dft_bluestein_t t, slong n, slong prec) ACB_DFT_INLINE void acb_dft_bluestein_clear(acb_dft_bluestein_t t) { - _acb_vec_clear(t->z, t->n); - _acb_vec_clear(t->g, t->rad2->n); - acb_dft_rad2_clear(t->rad2); + if (t->n != 0) + { + _acb_vec_clear(t->z, t->n); + _acb_vec_clear(t->g, t->rad2->n); + acb_dft_rad2_clear(t->rad2); + } } void _acb_dft_crt_init(acb_dft_crt_t crt, slong dv, slong len, slong prec); diff --git a/acb_dft/bluestein.c b/acb_dft/bluestein.c index 37e2883d..2e332a3c 100644 --- a/acb_dft/bluestein.c +++ b/acb_dft/bluestein.c @@ -88,16 +88,21 @@ _acb_dft_bluestein_init(acb_dft_bluestein_t t, slong dv, slong n, slong prec) { acb_ptr z, g; slong k, n2; - int e = n_clog(2 * n - 1, 2); + int e; + + t->n = n; + t->dv = dv; + + if (n == 0) + return; + + e = n_clog(2 * n - 1, 2); if (DFT_VERB) flint_printf("dft_bluestein: init z[2^%i]\n", e); acb_dft_rad2_init(t->rad2, e, prec); - t->n = n; - t->dv = dv; - t->z = z = _acb_vec_init(n); _acb_vec_bluestein_factors(t->z, n, prec); @@ -118,6 +123,9 @@ acb_dft_bluestein_precomp(acb_ptr w, acb_srcptr v, const acb_dft_bluestein_t t, slong n = t->n, np = t->rad2->n, dv = t->dv; acb_ptr fp; + if (n == 0) + return; + fp = _acb_vec_init(np); _acb_vec_kronecker_mul_step(fp, t->z, v, dv, n, prec);