Beispiel #1
0
    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;
    }
Beispiel #2
0
 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_);
     }
 }