factor out code for generating tables of powers

This commit is contained in:
Fredrik Johansson 2013-04-26 16:58:43 +02:00
parent e66b930ab4
commit c1ecf12e18
6 changed files with 40 additions and 44 deletions

18
fmpcb.h
View file

@ -696,4 +696,22 @@ _fmpcb_vec_bits(const fmpcb_struct * vec, long len)
return _fmprb_vec_bits((const fmprb_struct *) vec, 2 * len);
}
static __inline__ void
_fmpcb_vec_set_powers(fmpcb_struct * xs, const fmpcb_t x, long len, long prec)
{
long i;
for (i = 0; i < len; i++)
{
if (i == 0)
fmpcb_one(xs + i);
else if (i == 1)
fmpcb_set_round(xs + i, x, prec);
else if (i % 2 == 0)
fmpcb_mul(xs + i, xs + i / 2, xs + i / 2, prec);
else
fmpcb_mul(xs + i, xs + i - 1, x, prec);
}
}
#endif

18
fmprb.h
View file

@ -670,4 +670,22 @@ _fmprb_vec_bits(const fmprb_struct * x, long len)
return b;
}
static __inline__ void
_fmprb_vec_set_powers(fmprb_struct * xs, const fmprb_t x, long len, long prec)
{
long i;
for (i = 0; i < len; i++)
{
if (i == 0)
fmprb_one(xs + i);
else if (i == 1)
fmprb_set_round(xs + i, x, prec);
else if (i % 2 == 0)
fmprb_mul(xs + i, xs + i / 2, xs + i / 2, prec);
else
fmprb_mul(xs + i, xs + i - 1, x, prec);
}
}
#endif

View file

@ -65,17 +65,7 @@ _fmprb_poly_evaluate2_fmpcb_rectangular(fmpcb_t y, fmpcb_t z,
fmpcb_init(t);
fmprb_init(c);
for (i = 0; i <= m; i++)
{
if (i == 0)
fmpcb_one(xs + i);
else if (i == 1)
fmpcb_set(xs + i, x);
else if (i % 2 == 0)
fmpcb_mul(xs + i, xs + i / 2, xs + i / 2, prec);
else
fmpcb_mul(xs + i, xs + i - 1, x, prec);
}
_fmpcb_vec_set_powers(xs, x, m + 1, prec);
fmpcb_set_fmprb(y, poly + (r - 1) * m);
for (j = 1; (r - 1) * m + j < len; j++)

View file

@ -64,17 +64,7 @@ _fmprb_poly_evaluate2_rectangular(fmprb_t y, fmprb_t z, const fmprb_struct * pol
fmprb_init(t);
fmprb_init(c);
for (i = 0; i <= m; i++)
{
if (i == 0)
fmprb_one(xs + i);
else if (i == 1)
fmprb_set(xs + i, x);
else if (i % 2 == 0)
fmprb_mul(xs + i, xs + i / 2, xs + i / 2, prec);
else
fmprb_mul(xs + i, xs + i - 1, x, prec);
}
_fmprb_vec_set_powers(xs, x, m + 1, prec);
fmprb_set(y, poly + (r - 1) * m);
for (j = 1; (r - 1) * m + j < len; j++)

View file

@ -59,17 +59,7 @@ _fmprb_poly_evaluate_fmpcb_rectangular(fmpcb_t y, const fmprb_struct * poly,
fmpcb_init(t);
fmpcb_init(c);
for (i = 0; i <= m; i++)
{
if (i == 0)
fmpcb_one(xs + i);
else if (i == 1)
fmpcb_set(xs + i, x);
else if (i % 2 == 0)
fmpcb_mul(xs + i, xs + i / 2, xs + i / 2, prec);
else
fmpcb_mul(xs + i, xs + i - 1, x, prec);
}
_fmpcb_vec_set_powers(xs, x, m + 1, prec);
fmpcb_set_fmprb(y, poly + (r - 1) * m);
for (j = 1; (r - 1) * m + j < len; j++)

View file

@ -59,17 +59,7 @@ _fmprb_poly_evaluate_rectangular(fmprb_t y, const fmprb_struct * poly,
fmprb_init(t);
fmprb_init(c);
for (i = 0; i <= m; i++)
{
if (i == 0)
fmprb_one(xs + i);
else if (i == 1)
fmprb_set(xs + i, x);
else if (i % 2 == 0)
fmprb_mul(xs + i, xs + i / 2, xs + i / 2, prec);
else
fmprb_mul(xs + i, xs + i - 1, x, prec);
}
_fmprb_vec_set_powers(xs, x, m + 1, prec);
fmprb_set(y, poly + (r - 1) * m);
for (j = 1; (r - 1) * m + j < len; j++)