switch to usual dft convention (minus sign)

This commit is contained in:
Pascal 2017-10-29 00:37:27 +02:00
parent 4376829974
commit aa61f5bfed
7 changed files with 16 additions and 13 deletions

View file

@ -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);

View file

@ -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])

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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 */

View file

@ -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;
}

View file

@ -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);