
Dear Roberto,
// FIXME(0.10.1): the test seems to speed up the GMP computation. if (tableau_ij != 0) { scalar_value = tableau_ij * norm_factor[i]; add_mul_assign(challenger_den, scalar_value, scalar_value); }
inline void add_mul_assign(GMP_Integer& x, const GMP_Integer& y, const GMP_Integer& z) { mpz_addmul(x.get_mpz_t(), y.get_mpz_t(), z.get_mpz_t()); }
I'm ignorant about C++, but maybe the speedup you observe is due to the scalar_value = tableau_ij * norm_factor[i] instruction which is not done any more (which types have scalar_value, tableau_ij and norm_factor[i] ?), or maybe to some init/clear/conversion due to that instruction, or even to the xxx.get_mpz_t() calls.
Indeed, the code of mpz_aorsmul (which implements mpz_addmul) starts with:
mpz_aorsmul (mpz_ptr w, mpz_srcptr x, mpz_srcptr y, mp_size_t sub) { ...
xsize = SIZ(x); ysize = SIZ(y); if (xsize == 0 || ysize == 0) return;
My advice is to convert this part of the code to plain C calling directly the GMP routines, and/or moving scalar_value = tableau_ij * norm_factor[i] before the test.
Paul Zimmermann