mirror of
https://github.com/vale981/arb
synced 2025-03-04 17:01:40 -05:00
use arb_dot/acb_dot in more polynomial methods
This commit is contained in:
parent
ffa60bf319
commit
a682aedb61
6 changed files with 24 additions and 40 deletions
|
@ -51,21 +51,18 @@ _acb_poly_evaluate2_rectangular(acb_t y, acb_t z, acb_srcptr poly,
|
|||
acb_init(c);
|
||||
|
||||
_acb_vec_set_powers(xs, x, m + 1, prec);
|
||||
|
||||
acb_set(y, poly + (r - 1) * m);
|
||||
for (j = 1; (r - 1) * m + j < len; j++)
|
||||
acb_addmul(y, xs + j, poly + (r - 1) * m + j, prec);
|
||||
acb_dot(y, poly + (r - 1) * m, 0, xs + 1, 1,
|
||||
poly + (r - 1) * m + 1, 1, len - (r - 1) * m - 1, prec);
|
||||
|
||||
for (i = r - 2; i >= 0; i--)
|
||||
{
|
||||
acb_set(s, poly + i * m);
|
||||
for (j = 1; j < m; j++)
|
||||
acb_addmul(s, xs + j, poly + i * m + j, prec);
|
||||
|
||||
acb_dot(s, poly + i * m, 0, xs + 1, 1,
|
||||
poly + i * m + 1, 1, m - 1, prec);
|
||||
acb_mul(y, y, xs + m, prec);
|
||||
acb_add(y, y, s, prec);
|
||||
}
|
||||
|
||||
/* todo: rewrite using acb_dot */
|
||||
len -= 1;
|
||||
r = (len + m - 1) / m;
|
||||
acb_mul_ui(z, poly + (r - 1) * m + 1, (r - 1) * m + 1, ARF_PREC_EXACT);
|
||||
|
|
|
@ -15,7 +15,7 @@ void
|
|||
_acb_poly_evaluate_rectangular(acb_t y, acb_srcptr poly,
|
||||
slong len, const acb_t x, slong prec)
|
||||
{
|
||||
slong i, j, m, r;
|
||||
slong i, m, r;
|
||||
acb_ptr xs;
|
||||
acb_t s, t, c;
|
||||
|
||||
|
@ -46,17 +46,13 @@ _acb_poly_evaluate_rectangular(acb_t y, acb_srcptr poly,
|
|||
acb_init(c);
|
||||
|
||||
_acb_vec_set_powers(xs, x, m + 1, prec);
|
||||
|
||||
acb_set(y, poly + (r - 1) * m);
|
||||
for (j = 1; (r - 1) * m + j < len; j++)
|
||||
acb_addmul(y, xs + j, poly + (r - 1) * m + j, prec);
|
||||
acb_dot(y, poly + (r - 1) * m, 0, xs + 1, 1,
|
||||
poly + (r - 1) * m + 1, 1, len - (r - 1) * m - 1, prec);
|
||||
|
||||
for (i = r - 2; i >= 0; i--)
|
||||
{
|
||||
acb_set(s, poly + i * m);
|
||||
for (j = 1; j < m; j++)
|
||||
acb_addmul(s, xs + j, poly + i * m + j, prec);
|
||||
|
||||
acb_dot(s, poly + i * m, 0, xs + 1, 1,
|
||||
poly + i * m + 1, 1, m - 1, prec);
|
||||
acb_mul(y, y, xs + m, prec);
|
||||
acb_add(y, y, s, prec);
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
void
|
||||
_acb_poly_revert_series_lagrange_fast(acb_ptr Qinv, acb_srcptr Q, slong Qlen, slong n, slong prec)
|
||||
{
|
||||
slong i, j, k, m;
|
||||
slong i, j, m;
|
||||
acb_ptr R, S, T, tmp;
|
||||
acb_t t;
|
||||
|
||||
|
@ -55,9 +55,7 @@ _acb_poly_revert_series_lagrange_fast(acb_ptr Qinv, acb_srcptr Q, slong Qlen, sl
|
|||
|
||||
for (j = 1; j < m && i + j < n; j++)
|
||||
{
|
||||
acb_mul(t, S + 0, Ri(j) + i + j - 1, prec);
|
||||
for (k = 1; k <= i + j - 1; k++)
|
||||
acb_addmul(t, S + k, Ri(j) + i + j - 1 - k, prec);
|
||||
acb_dot(t, NULL, 0, S, 1, Ri(j) + i + j - 1, -1, i + j, prec);
|
||||
acb_div_ui(Qinv + i + j, t, i + j, prec);
|
||||
}
|
||||
|
||||
|
|
|
@ -52,20 +52,18 @@ _arb_poly_evaluate2_rectangular(arb_t y, arb_t z, arb_srcptr poly,
|
|||
|
||||
_arb_vec_set_powers(xs, x, m + 1, prec);
|
||||
|
||||
arb_set(y, poly + (r - 1) * m);
|
||||
for (j = 1; (r - 1) * m + j < len; j++)
|
||||
arb_addmul(y, xs + j, poly + (r - 1) * m + j, prec);
|
||||
arb_dot(y, poly + (r - 1) * m, 0, xs + 1, 1,
|
||||
poly + (r - 1) * m + 1, 1, len - (r - 1) * m - 1, prec);
|
||||
|
||||
for (i = r - 2; i >= 0; i--)
|
||||
{
|
||||
arb_set(s, poly + i * m);
|
||||
for (j = 1; j < m; j++)
|
||||
arb_addmul(s, xs + j, poly + i * m + j, prec);
|
||||
|
||||
arb_dot(s, poly + i * m, 0, xs + 1, 1,
|
||||
poly + i * m + 1, 1, m - 1, prec);
|
||||
arb_mul(y, y, xs + m, prec);
|
||||
arb_add(y, y, s, prec);
|
||||
}
|
||||
|
||||
/* todo: rewrite using arb_dot */
|
||||
len -= 1;
|
||||
r = (len + m - 1) / m;
|
||||
arb_mul_ui(z, poly + (r - 1) * m + 1, (r - 1) * m + 1, ARF_PREC_EXACT);
|
||||
|
|
|
@ -15,7 +15,7 @@ void
|
|||
_arb_poly_evaluate_rectangular(arb_t y, arb_srcptr poly,
|
||||
slong len, const arb_t x, slong prec)
|
||||
{
|
||||
slong i, j, m, r;
|
||||
slong i, m, r;
|
||||
arb_ptr xs;
|
||||
arb_t s, t, c;
|
||||
|
||||
|
@ -47,16 +47,13 @@ _arb_poly_evaluate_rectangular(arb_t y, arb_srcptr poly,
|
|||
|
||||
_arb_vec_set_powers(xs, x, m + 1, prec);
|
||||
|
||||
arb_set(y, poly + (r - 1) * m);
|
||||
for (j = 1; (r - 1) * m + j < len; j++)
|
||||
arb_addmul(y, xs + j, poly + (r - 1) * m + j, prec);
|
||||
arb_dot(y, poly + (r - 1) * m, 0, xs + 1, 1,
|
||||
poly + (r - 1) * m + 1, 1, len - (r - 1) * m - 1, prec);
|
||||
|
||||
for (i = r - 2; i >= 0; i--)
|
||||
{
|
||||
arb_set(s, poly + i * m);
|
||||
for (j = 1; j < m; j++)
|
||||
arb_addmul(s, xs + j, poly + i * m + j, prec);
|
||||
|
||||
arb_dot(s, poly + i * m, 0, xs + 1, 1,
|
||||
poly + i * m + 1, 1, m - 1, prec);
|
||||
arb_mul(y, y, xs + m, prec);
|
||||
arb_add(y, y, s, prec);
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
void
|
||||
_arb_poly_revert_series_lagrange_fast(arb_ptr Qinv, arb_srcptr Q, slong Qlen, slong n, slong prec)
|
||||
{
|
||||
slong i, j, k, m;
|
||||
slong i, j, m;
|
||||
arb_ptr R, S, T, tmp;
|
||||
arb_t t;
|
||||
|
||||
|
@ -55,9 +55,7 @@ _arb_poly_revert_series_lagrange_fast(arb_ptr Qinv, arb_srcptr Q, slong Qlen, sl
|
|||
|
||||
for (j = 1; j < m && i + j < n; j++)
|
||||
{
|
||||
arb_mul(t, S + 0, Ri(j) + i + j - 1, prec);
|
||||
for (k = 1; k <= i + j - 1; k++)
|
||||
arb_addmul(t, S + k, Ri(j) + i + j - 1 - k, prec);
|
||||
arb_dot(t, NULL, 0, S, 1, Ri(j) + i + j - 1, -1, i + j, prec);
|
||||
arb_div_ui(Qinv + i + j, t, i + j, prec);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue