diff options
author | Marco Bodrato <bodrato@mail.dm.unipi.it> | 2012-01-26 22:19:40 +0100 |
---|---|---|
committer | Marco Bodrato <bodrato@mail.dm.unipi.it> | 2012-01-26 22:19:40 +0100 |
commit | c714a4ab05ae98478ceebd291ce503d3c827a015 (patch) | |
tree | ec130909f478b6762a2b94a6e4178a506967833e /mpz/fac_ui.c | |
parent | c212d72f36b9980e9b18791de62e07a76f4b40e8 (diff) | |
download | gmp-c714a4ab05ae98478ceebd291ce503d3c827a015.tar.gz |
mpz_prodlimbs: removed from mpz/fac_ui.c, now in a new file.
Diffstat (limited to 'mpz/fac_ui.c')
-rw-r--r-- | mpz/fac_ui.c | 67 |
1 files changed, 0 insertions, 67 deletions
diff --git a/mpz/fac_ui.c b/mpz/fac_ui.c index 58be91b82..b1801509a 100644 --- a/mpz/fac_ui.c +++ b/mpz/fac_ui.c @@ -294,73 +294,6 @@ bitwise_primesieve (mp_ptr bit_array, mp_limb_t n) #undef BLOCK_SIZE /*********************************************************/ -/* Section list-prod: product of a list -> mpz_t */ -/*********************************************************/ - -/* FIXME: should be tuned */ -#ifndef RECURSIVE_PROD_THRESHOLD -#define RECURSIVE_PROD_THRESHOLD (MUL_TOOM22_THRESHOLD|(MUL_TOOM22_THRESHOLD>>1)) -#endif - -/* Computes the product of the j>1 limbs pointed by factors, puts the - result in x. - The list in {factors, j} is overwritten. -*/ - -static void -mpz_prodlimbs (mpz_ptr x, mp_limb_t *factors, mp_limb_t j) -{ - mp_limb_t i; - mp_size_t size; - mp_ptr prod; - - ASSERT (j > 1); - ASSERT (RECURSIVE_PROD_THRESHOLD > 3); - - if (BELOW_THRESHOLD (j, RECURSIVE_PROD_THRESHOLD)) { - mp_limb_t cy; - - j--; - size = 1; - - for (i = 1; i < j; i++) - { - cy = mpn_mul_1 (factors, factors, size, factors[i]); - factors[size] = cy; - size += cy != 0; - }; - - prod = MPZ_REALLOC (x, size + 1); - - cy = mpn_mul_1 (prod, factors, size, factors[i]); - prod[size] = cy; - SIZ (x) = size + (cy != 0); - } else { - mpz_t x1, x2; - TMP_DECL; - - i = j >> 1; - TMP_MARK; - - MPZ_TMP_INIT (x2, j - i); - - PTR (x1) = factors + i; - ALLOC (x1) = j - i; - mpz_prodlimbs (x2, factors + i, j - i); - mpz_prodlimbs (x1, factors, i); - size = SIZ (x1) + SIZ (x2); - prod = MPZ_REALLOC (x, size); - if (SIZ (x1) >= SIZ (x2)) - i = mpn_mul (prod, PTR(x1), SIZ(x1), PTR(x2), SIZ(x2)); - else - i = mpn_mul (prod, PTR(x2), SIZ(x2), PTR(x1), SIZ(x1)); - SIZ (x) = size - (i == 0); - - TMP_FREE; - } -} - -/*********************************************************/ /* Section swing: swing factorial */ /*********************************************************/ |