mirror of
https://github.com/vale981/arb
synced 2025-03-04 17:01:40 -05:00
speed up some unnecessarily slow tests
This commit is contained in:
parent
03add27ec1
commit
7759e89a79
9 changed files with 66 additions and 60 deletions
|
@ -25,8 +25,8 @@
|
|||
|
||||
#include "acb_poly.h"
|
||||
|
||||
#define NEWTON_EXP_CUTOFF 120
|
||||
|
||||
/* allow changing this from the test code */
|
||||
slong acb_poly_newton_exp_cutoff = 120;
|
||||
|
||||
/* with inverse=1 simultaneously computes g = exp(-x) to length n
|
||||
with inverse=0 uses g as scratch space, computing
|
||||
|
@ -126,7 +126,7 @@ _acb_poly_exp_series(acb_ptr f, acb_srcptr h, slong hlen, slong n, slong prec)
|
|||
_acb_vec_zero(f + j - d + 1, n - (j - d + 1));
|
||||
acb_clear(t);
|
||||
}
|
||||
else if (hlen <= NEWTON_EXP_CUTOFF)
|
||||
else if (hlen <= acb_poly_newton_exp_cutoff)
|
||||
{
|
||||
_acb_poly_exp_series_basecase(f, h, hlen, n, prec);
|
||||
}
|
||||
|
@ -150,7 +150,7 @@ _acb_poly_exp_series(acb_ptr f, acb_srcptr h, slong hlen, slong n, slong prec)
|
|||
acb_init(u);
|
||||
acb_exp(u, h, prec);
|
||||
|
||||
_acb_poly_exp_series_newton(f, g, t, n, prec, 0, NEWTON_EXP_CUTOFF);
|
||||
_acb_poly_exp_series_newton(f, g, t, n, prec, 0, acb_poly_newton_exp_cutoff);
|
||||
|
||||
if (!acb_is_one(u))
|
||||
_acb_vec_scalar_mul(f, f, n, u, prec);
|
||||
|
|
|
@ -25,6 +25,8 @@
|
|||
|
||||
#include "acb_poly.h"
|
||||
|
||||
extern slong acb_poly_newton_exp_cutoff;
|
||||
|
||||
int main()
|
||||
{
|
||||
slong iter;
|
||||
|
@ -40,14 +42,19 @@ int main()
|
|||
slong m, n, bits1, bits2, bits3;
|
||||
acb_poly_t a, b, c, d;
|
||||
|
||||
bits1 = 2 + n_randint(state, 200);
|
||||
bits2 = 2 + n_randint(state, 200);
|
||||
bits3 = 2 + n_randint(state, 200);
|
||||
bits1 = 2 + n_randint(state, 100);
|
||||
bits2 = 2 + n_randint(state, 100);
|
||||
bits3 = 2 + n_randint(state, 100);
|
||||
|
||||
if (iter > 1000)
|
||||
{
|
||||
acb_poly_newton_exp_cutoff = 5 + n_randint(state, 50);
|
||||
}
|
||||
|
||||
if (n_randint(state, 100) == 0)
|
||||
{
|
||||
m = 1 + n_randint(state, 400);
|
||||
n = 1 + n_randint(state, 400);
|
||||
m = 1 + n_randint(state, 100);
|
||||
n = 1 + n_randint(state, 100);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -60,8 +67,8 @@ int main()
|
|||
acb_poly_init(c);
|
||||
acb_poly_init(d);
|
||||
|
||||
acb_poly_randtest(a, state, m, bits1, 10);
|
||||
acb_poly_randtest(b, state, m, bits1, 10);
|
||||
acb_poly_randtest(a, state, m, bits1, 5);
|
||||
acb_poly_randtest(b, state, m, bits1, 5);
|
||||
|
||||
acb_poly_randtest(c, state, 1 + n_randint(state, 300), bits1, 10);
|
||||
acb_poly_randtest(d, state, 1 + n_randint(state, 300), bits1, 10);
|
||||
|
|
|
@ -40,20 +40,20 @@ int main()
|
|||
slong m, n, bits1, bits2, bits3;
|
||||
acb_poly_t a, b, c, d;
|
||||
|
||||
bits1 = 2 + n_randint(state, 200);
|
||||
bits2 = 2 + n_randint(state, 200);
|
||||
bits3 = 2 + n_randint(state, 200);
|
||||
bits1 = 2 + n_randint(state, 100);
|
||||
bits2 = 2 + n_randint(state, 100);
|
||||
bits3 = 2 + n_randint(state, 100);
|
||||
|
||||
m = 1 + n_randint(state, 40);
|
||||
n = 1 + n_randint(state, 40);
|
||||
m = 1 + n_randint(state, 30);
|
||||
n = 1 + n_randint(state, 30);
|
||||
|
||||
acb_poly_init(a);
|
||||
acb_poly_init(b);
|
||||
acb_poly_init(c);
|
||||
acb_poly_init(d);
|
||||
|
||||
acb_poly_randtest(a, state, m, bits1, 10);
|
||||
acb_poly_randtest(b, state, m, bits1, 10);
|
||||
acb_poly_randtest(a, state, m, bits1, 5);
|
||||
acb_poly_randtest(b, state, m, bits1, 5);
|
||||
|
||||
/* check exp(a+b) = exp(a) exp(b) */
|
||||
acb_poly_exp_series_basecase(c, a, n, bits2);
|
||||
|
|
|
@ -40,11 +40,19 @@ int main()
|
|||
slong m, n, rbits1, rbits2;
|
||||
acb_poly_t a, b, c, d, e;
|
||||
|
||||
rbits1 = 2 + n_randint(state, 200);
|
||||
rbits2 = 2 + n_randint(state, 200);
|
||||
rbits1 = 2 + n_randint(state, 100);
|
||||
rbits2 = 2 + n_randint(state, 100);
|
||||
|
||||
m = 1 + n_randint(state, 50);
|
||||
n = 1 + n_randint(state, 50);
|
||||
if (n_randint(state, 10) == 0)
|
||||
{
|
||||
m = 1 + n_randint(state, 50);
|
||||
n = 1 + n_randint(state, 50);
|
||||
}
|
||||
else
|
||||
{
|
||||
m = 1 + n_randint(state, 20);
|
||||
n = 1 + n_randint(state, 20);
|
||||
}
|
||||
|
||||
acb_poly_init(a);
|
||||
acb_poly_init(b);
|
||||
|
@ -53,8 +61,6 @@ int main()
|
|||
acb_poly_init(e);
|
||||
|
||||
acb_poly_randtest(a, state, m, rbits1, 10);
|
||||
acb_poly_set_coeff_si(a, 0, 0); /* TODO: implement complex atan */
|
||||
|
||||
acb_poly_tan_series(b, a, n, rbits2);
|
||||
|
||||
/* check tan(x) = 2*tan(x/2)/(1-tan(x/2)^2) */
|
||||
|
|
|
@ -85,7 +85,7 @@ int main()
|
|||
}
|
||||
|
||||
/* check large arguments */
|
||||
for (iter = 0; iter < 1000000; iter++)
|
||||
for (iter = 0; iter < 100000; iter++)
|
||||
{
|
||||
arb_t a, b, c, d;
|
||||
slong prec0, prec1, prec2;
|
||||
|
|
|
@ -85,7 +85,7 @@ int main()
|
|||
}
|
||||
|
||||
/* check large arguments */
|
||||
for (iter = 0; iter < 1000000; iter++)
|
||||
for (iter = 0; iter < 100000; iter++)
|
||||
{
|
||||
arb_t a, b, c, d;
|
||||
slong prec0, prec1, prec2;
|
||||
|
|
|
@ -90,7 +90,7 @@ int main()
|
|||
}
|
||||
|
||||
/* check large arguments */
|
||||
for (iter = 0; iter < 1000000; iter++)
|
||||
for (iter = 0; iter < 100000; iter++)
|
||||
{
|
||||
arb_t a, b, c, d, e;
|
||||
slong prec0, prec1, prec2, prec3;
|
||||
|
|
|
@ -25,7 +25,8 @@
|
|||
|
||||
#include "arb_poly.h"
|
||||
|
||||
#define NEWTON_EXP_CUTOFF 200
|
||||
/* allow changing this from the test code */
|
||||
slong arb_poly_newton_exp_cutoff = 200;
|
||||
|
||||
/* with inverse=1 simultaneously computes g = exp(-x) to length n
|
||||
with inverse=0 uses g as scratch space, computing
|
||||
|
@ -125,7 +126,7 @@ _arb_poly_exp_series(arb_ptr f, arb_srcptr h, slong hlen, slong n, slong prec)
|
|||
_arb_vec_zero(f + j - d + 1, n - (j - d + 1));
|
||||
arb_clear(t);
|
||||
}
|
||||
else if (hlen <= NEWTON_EXP_CUTOFF)
|
||||
else if (hlen <= arb_poly_newton_exp_cutoff)
|
||||
{
|
||||
_arb_poly_exp_series_basecase(f, h, hlen, n, prec);
|
||||
}
|
||||
|
@ -149,7 +150,7 @@ _arb_poly_exp_series(arb_ptr f, arb_srcptr h, slong hlen, slong n, slong prec)
|
|||
arb_init(u);
|
||||
arb_exp(u, h, prec);
|
||||
|
||||
_arb_poly_exp_series_newton(f, g, t, n, prec, 0, NEWTON_EXP_CUTOFF);
|
||||
_arb_poly_exp_series_newton(f, g, t, n, prec, 0, arb_poly_newton_exp_cutoff);
|
||||
|
||||
if (!arb_is_one(u))
|
||||
_arb_vec_scalar_mul(f, f, n, u, prec);
|
||||
|
|
|
@ -25,20 +25,7 @@
|
|||
|
||||
#include "arb_poly.h"
|
||||
|
||||
|
||||
/* hack: avoid overflow since exp currently uses mpfr */
|
||||
void
|
||||
fmpq_poly_randtest_small(fmpq_poly_t A, flint_rand_t state, slong len, slong bits)
|
||||
{
|
||||
fmpq_poly_randtest(A, state, len, bits);
|
||||
if (A->length > 0)
|
||||
{
|
||||
bits = _fmpz_vec_max_bits(A->coeffs, A->length);
|
||||
bits = FLINT_ABS(bits);
|
||||
fmpz_mul_2exp(A->den, A->den, bits);
|
||||
_fmpq_poly_normalise(A);
|
||||
}
|
||||
}
|
||||
extern slong arb_poly_newton_exp_cutoff;
|
||||
|
||||
int main()
|
||||
{
|
||||
|
@ -57,9 +44,9 @@ int main()
|
|||
fmpq_poly_t A, B;
|
||||
arb_poly_t a, b;
|
||||
|
||||
qbits = 2 + n_randint(state, 200);
|
||||
rbits1 = 2 + n_randint(state, 200);
|
||||
rbits2 = 2 + n_randint(state, 200);
|
||||
qbits = 2 + n_randint(state, 100);
|
||||
rbits1 = 2 + n_randint(state, 100);
|
||||
rbits2 = 2 + n_randint(state, 100);
|
||||
|
||||
m = 1 + n_randint(state, 20);
|
||||
n = 1 + n_randint(state, 20);
|
||||
|
@ -106,14 +93,14 @@ int main()
|
|||
fmpq_poly_t A;
|
||||
arb_poly_t a, b;
|
||||
|
||||
qbits = 2 + n_randint(state, 200);
|
||||
rbits1 = 2 + n_randint(state, 200);
|
||||
rbits2 = 2 + n_randint(state, 200);
|
||||
qbits = 2 + n_randint(state, 100);
|
||||
rbits1 = 2 + n_randint(state, 100);
|
||||
rbits2 = 2 + n_randint(state, 100);
|
||||
|
||||
if (n_randint(state, 100) == 0)
|
||||
{
|
||||
m = 1 + n_randint(state, 600);
|
||||
n = 1 + n_randint(state, 600);
|
||||
m = 1 + n_randint(state, 300);
|
||||
n = 1 + n_randint(state, 300);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -125,7 +112,7 @@ int main()
|
|||
arb_poly_init(a);
|
||||
arb_poly_init(b);
|
||||
|
||||
fmpq_poly_randtest_small(A, state, m, qbits);
|
||||
fmpq_poly_randtest(A, state, m, qbits);
|
||||
|
||||
arb_poly_randtest(a, state, 1 + n_randint(state, 300), rbits1, 5);
|
||||
arb_poly_set_fmpq_poly(a, A, rbits1);
|
||||
|
@ -158,15 +145,20 @@ int main()
|
|||
fmpq_poly_t A;
|
||||
arb_poly_t a, b, c;
|
||||
|
||||
qbits = 2 + n_randint(state, 200);
|
||||
rbits1 = 2 + n_randint(state, 200);
|
||||
rbits2 = 2 + n_randint(state, 200);
|
||||
rbits3 = 2 + n_randint(state, 200);
|
||||
qbits = 2 + n_randint(state, 100);
|
||||
rbits1 = 2 + n_randint(state, 100);
|
||||
rbits2 = 2 + n_randint(state, 100);
|
||||
rbits3 = 2 + n_randint(state, 100);
|
||||
|
||||
if (iter > 100)
|
||||
{
|
||||
arb_poly_newton_exp_cutoff = 5 + n_randint(state, 50);
|
||||
}
|
||||
|
||||
if (n_randint(state, 100) == 0)
|
||||
{
|
||||
m = 1 + n_randint(state, 600);
|
||||
n = 1 + n_randint(state, 600);
|
||||
m = 1 + n_randint(state, 100);
|
||||
n = 1 + n_randint(state, 100);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -182,7 +174,7 @@ int main()
|
|||
arb_poly_randtest(b, state, 1 + n_randint(state, 300), rbits1, 5);
|
||||
|
||||
do {
|
||||
fmpq_poly_randtest_small(A, state, m, qbits);
|
||||
fmpq_poly_randtest(A, state, m, qbits);
|
||||
arb_poly_set_fmpq_poly(a, A, rbits1);
|
||||
arb_poly_exp_series(b, a, n, rbits3);
|
||||
} while (b->length == 0 || arb_contains_zero(b->coeffs));
|
||||
|
|
Loading…
Add table
Reference in a new issue