mirror of
https://github.com/vale981/arb
synced 2025-03-04 17:01:40 -05:00
use flint fft mpn_mul
This commit is contained in:
parent
b74162a5a7
commit
8b2c1704f0
4 changed files with 24 additions and 6 deletions
|
@ -292,6 +292,9 @@ arb_ui_pow_ui(arb_t res, ulong a, ulong exp, slong prec)
|
||||||
}
|
}
|
||||||
else /* or exactly */
|
else /* or exactly */
|
||||||
{
|
{
|
||||||
|
if (ARF_USE_FFT_MUL(yn))
|
||||||
|
flint_mpn_mul_fft_main(tmp, yman, yn, yman, yn);
|
||||||
|
else
|
||||||
mpn_sqr(tmp, yman, yn);
|
mpn_sqr(tmp, yman, yn);
|
||||||
yn = 2 * yn;
|
yn = 2 * yn;
|
||||||
}
|
}
|
||||||
|
|
15
arf.h
15
arf.h
|
@ -826,6 +826,11 @@ void arf_urandom(arf_t x, flint_rand_t state, slong bits, arf_rnd_t rnd);
|
||||||
r3 += r2 < t1; \
|
r3 += r2 < t1; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
#define ARF_USE_FFT_MUL(_xn) ((_xn) > 10000)
|
||||||
|
|
||||||
|
/* from flint/fft.h */
|
||||||
|
void flint_mpn_mul_fft_main(mp_ptr r1, mp_srcptr i1, mp_size_t n1, mp_srcptr i2, mp_size_t n2);
|
||||||
|
|
||||||
#define ARF_MPN_MUL(_z, _x, _xn, _y, _yn) \
|
#define ARF_MPN_MUL(_z, _x, _xn, _y, _yn) \
|
||||||
if ((_xn) == (_yn)) \
|
if ((_xn) == (_yn)) \
|
||||||
{ \
|
{ \
|
||||||
|
@ -842,19 +847,19 @@ void arf_urandom(arf_t x, flint_rand_t state, slong bits, arf_rnd_t rnd);
|
||||||
__arb_y1 = (_y)[1]; \
|
__arb_y1 = (_y)[1]; \
|
||||||
nn_mul_2x2((_z)[3], (_z)[2], (_z)[1], (_z)[0], __arb_x1, __arb_x0, __arb_y1, __arb_y0); \
|
nn_mul_2x2((_z)[3], (_z)[2], (_z)[1], (_z)[0], __arb_x1, __arb_x0, __arb_y1, __arb_y0); \
|
||||||
} \
|
} \
|
||||||
|
else if (ARF_USE_FFT_MUL(_xn)) \
|
||||||
|
flint_mpn_mul_fft_main((_z), (_x), (_xn), (_y), (_yn)); \
|
||||||
else if ((_x) == (_y)) \
|
else if ((_x) == (_y)) \
|
||||||
{ \
|
|
||||||
mpn_sqr((_z), (_x), (_xn)); \
|
mpn_sqr((_z), (_x), (_xn)); \
|
||||||
} \
|
|
||||||
else \
|
else \
|
||||||
{ \
|
|
||||||
mpn_mul_n((_z), (_x), (_y), (_xn)); \
|
mpn_mul_n((_z), (_x), (_y), (_xn)); \
|
||||||
} \
|
} \
|
||||||
} \
|
|
||||||
else if ((_xn) > (_yn)) \
|
else if ((_xn) > (_yn)) \
|
||||||
{ \
|
{ \
|
||||||
if ((_yn) == 1) \
|
if ((_yn) == 1) \
|
||||||
(_z)[(_xn) + (_yn) - 1] = mpn_mul_1((_z), (_x), (_xn), (_y)[0]); \
|
(_z)[(_xn) + (_yn) - 1] = mpn_mul_1((_z), (_x), (_xn), (_y)[0]); \
|
||||||
|
else if (ARF_USE_FFT_MUL(_yn)) \
|
||||||
|
flint_mpn_mul_fft_main((_z), (_x), (_xn), (_y), (_yn)); \
|
||||||
else \
|
else \
|
||||||
mpn_mul((_z), (_x), (_xn), (_y), (_yn)); \
|
mpn_mul((_z), (_x), (_xn), (_y), (_yn)); \
|
||||||
} \
|
} \
|
||||||
|
@ -862,6 +867,8 @@ void arf_urandom(arf_t x, flint_rand_t state, slong bits, arf_rnd_t rnd);
|
||||||
{ \
|
{ \
|
||||||
if ((_xn) == 1) \
|
if ((_xn) == 1) \
|
||||||
(_z)[(_xn) + (_yn) - 1] = mpn_mul_1((_z), (_y), (_yn), (_x)[0]); \
|
(_z)[(_xn) + (_yn) - 1] = mpn_mul_1((_z), (_y), (_yn), (_x)[0]); \
|
||||||
|
else if (ARF_USE_FFT_MUL(_xn)) \
|
||||||
|
flint_mpn_mul_fft_main((_z), (_y), (_yn), (_x), (_xn)); \
|
||||||
else \
|
else \
|
||||||
mpn_mul((_z), (_y), (_yn), (_x), (_xn)); \
|
mpn_mul((_z), (_y), (_yn), (_x), (_xn)); \
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,6 +55,10 @@ arf_mul_rnd_any(arf_ptr z, arf_srcptr x, arf_srcptr y,
|
||||||
{
|
{
|
||||||
tmp[zn - 1] = mpn_mul_1(tmp, xptr, xn, yptr[0]);
|
tmp[zn - 1] = mpn_mul_1(tmp, xptr, xn, yptr[0]);
|
||||||
}
|
}
|
||||||
|
else if (ARF_USE_FFT_MUL(yn))
|
||||||
|
{
|
||||||
|
flint_mpn_mul_fft_main(tmp, xptr, xn, yptr, yn);
|
||||||
|
}
|
||||||
else if (xn == yn)
|
else if (xn == yn)
|
||||||
{
|
{
|
||||||
if (xptr == yptr)
|
if (xptr == yptr)
|
||||||
|
|
|
@ -194,7 +194,11 @@ arf_mul_rnd_down(arf_ptr z, arf_srcptr x, arf_srcptr y, slong prec)
|
||||||
alloc = zn = xn + yn;
|
alloc = zn = xn + yn;
|
||||||
ARF_MUL_TMP_ALLOC(tmp, alloc)
|
ARF_MUL_TMP_ALLOC(tmp, alloc)
|
||||||
|
|
||||||
if (xn == yn)
|
if (ARF_USE_FFT_MUL(yn))
|
||||||
|
{
|
||||||
|
flint_mpn_mul_fft_main(tmp, xptr, xn, yptr, yn);
|
||||||
|
}
|
||||||
|
else if (xn == yn)
|
||||||
{
|
{
|
||||||
if (xptr == yptr)
|
if (xptr == yptr)
|
||||||
mpn_sqr(tmp, xptr, xn);
|
mpn_sqr(tmp, xptr, xn);
|
||||||
|
|
Loading…
Add table
Reference in a new issue