void bvisit(const Mul &x) { RCP<const Basic> curr_num = one; RCP<const Basic> curr_den = one; RCP<const Basic> arg_num, arg_den, t; for (const auto &arg : x.get_args()) { as_numer_denom(arg, outArg(arg_num), outArg(arg_den)); // TODO: This is naive and slow. Fix it t = div(curr_num, arg_den); if (neq(*t, x)) { as_numer_denom(t, outArg(curr_num), outArg(arg_den)); } t = div(curr_den, arg_num); if (neq(*t, x)) { as_numer_denom(t, outArg(curr_den), outArg(arg_num)); } curr_num = mul(curr_num, arg_num); curr_den = mul(curr_den, arg_den); } *numer_ = curr_num; *denom_ = curr_den; }
void bvisit(const Mul &x) { mpfr_class t(mpfr_get_prec(result_)); auto d = x.get_args(); auto p = d.begin(); apply(result_, *(*p)); p++; for (; p != d.end(); p++) { apply(t.get_mpfr_t(), *(*p)); mpfr_mul(result_, result_, t.get_mpfr_t(), rnd_); } }