mirror of
https://github.com/vale981/arb
synced 2025-03-05 09:21:38 -05:00
add acb_dft function
This commit is contained in:
parent
8e13588eb4
commit
33dafb4ff5
3 changed files with 18 additions and 4 deletions
|
@ -194,6 +194,8 @@ void _acb_dft_precomp_init(acb_dft_pre_t pre, slong dv, acb_ptr z, slong dz, slo
|
|||
void acb_dft_precomp_init(acb_dft_pre_t pre, slong len, slong prec);
|
||||
void acb_dft_precomp_clear(acb_dft_pre_t pre);
|
||||
|
||||
void acb_dft(acb_ptr w, acb_srcptr v, slong len, slong prec);
|
||||
|
||||
acb_dft_step_ptr _acb_dft_steps_prod(slong * m, slong num, slong prec);
|
||||
|
||||
ACB_DFT_INLINE void
|
||||
|
@ -299,6 +301,7 @@ _acb_vec_kronecker_mul(acb_ptr z, acb_srcptr x, acb_srcptr y, slong len, slong p
|
|||
acb_mul(z + k, x + k, y + k, prec);
|
||||
}
|
||||
|
||||
/* FIXME: no longer used */
|
||||
/* z[k] = conj(x[k])*y[k] */
|
||||
ACB_DFT_INLINE void
|
||||
acb_vec_kronecker_mul_conj(acb_ptr z, acb_srcptr x, acb_srcptr y, slong len, slong prec)
|
||||
|
|
|
@ -18,9 +18,13 @@ acb_dft_bluestein_init(acb_dft_bluestein_t t, slong n, slong prec)
|
|||
slong k, k2;
|
||||
acb_ptr z2n;
|
||||
int e = n_clog(2 * n - 1, 2);
|
||||
#if DFT_VERB
|
||||
flint_printf("\n init bluestein e = %i", e);
|
||||
#endif
|
||||
acb_dft_rad2_init(t->rad2, e, prec);
|
||||
|
||||
/* compute z[k] = e(-k^2/2n) */
|
||||
/* TODO: check if this can be improved */
|
||||
z2n = _acb_vec_init(2 * n);
|
||||
_acb_vec_unit_roots(z2n, 2 * n, prec);
|
||||
nmod_init(&n2, 2 * n);
|
||||
|
@ -74,4 +78,3 @@ acb_dft_bluestein(acb_ptr w, acb_srcptr v, slong len, slong prec)
|
|||
acb_dft_bluestein_precomp(w, v, t, prec);
|
||||
acb_dft_bluestein_clear(t);
|
||||
}
|
||||
|
||||
|
|
|
@ -21,8 +21,7 @@ _acb_dft_precomp_init(acb_dft_pre_t pre, slong dv, acb_ptr z, slong dz, slong le
|
|||
}
|
||||
if (n_is_prime(len))
|
||||
{
|
||||
/* TODO: need convolution if len is large */
|
||||
if (len < 20)
|
||||
if (len < 100)
|
||||
{
|
||||
pre->type = DFT_NAIVE;
|
||||
_acb_dft_naive_init(pre->t.naive, dv, z, dz, len, prec);
|
||||
|
@ -31,7 +30,7 @@ _acb_dft_precomp_init(acb_dft_pre_t pre, slong dv, acb_ptr z, slong dz, slong le
|
|||
{
|
||||
pre->type = DFT_CONV;
|
||||
/* FIXME: do not recompute the same bluestein
|
||||
* scheme over and over */
|
||||
* scheme if needed several times */
|
||||
acb_dft_bluestein_init(pre->t.bluestein, len, prec);
|
||||
}
|
||||
}
|
||||
|
@ -115,3 +114,12 @@ acb_dft_precomp(acb_ptr w, acb_srcptr v, const acb_dft_pre_t pre, slong prec)
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
acb_dft(acb_ptr w, acb_srcptr v, slong len, slong prec)
|
||||
{
|
||||
acb_dft_pre_t t;
|
||||
acb_dft_precomp_init(t, len, prec);
|
||||
acb_dft_precomp(w, v, t, prec);
|
||||
acb_dft_precomp_clear(t);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue