Esempio n. 1
0
cf_t corr_sz(cf_t *z, cf_t *s) {
	cf_t sum;
	cf_t zsprod[32];
	vec_dot_prod(z, s, zsprod, N_SSS - 1);
	sum = sum_c(zsprod, N_SSS - 1);

	return sum;
}
Esempio n. 2
0
 subpaving::var process_add(app * t, unsigned depth, mpz & n, mpz & d) {
     unsigned num_args = t->get_num_args();
     mpz_buffer ns(qm()), ds(qm());
     var_buffer xs;
     scoped_mpq c(qm()), c_arg(qm());
     scoped_mpz n_arg(qm()), d_arg(qm());
     for (unsigned i = 0; i < num_args; i++) {
         expr * arg           = t->get_arg(i);
         subpaving::var x_arg = process(arg, depth+1, n_arg, d_arg);
         if (x_arg == subpaving::null_var) {
             qm().set(c_arg, n_arg, d_arg);
             qm().add(c, c_arg, c);
         }
         else {
             xs.push_back(x_arg);
             ns.push_back(n_arg);
             ds.push_back(d_arg);
         }
     }
     qm().set(d,  c.get().denominator());
     unsigned sz = xs.size();
     for (unsigned i = 0; i < sz; i++) {
         qm().lcm(d, ds[i], d);
     }
     scoped_mpz & k = d_arg;
     qm().div(d, c.get().denominator(), k);
     scoped_mpz sum_c(qm());
     qm().mul(c.get().numerator(), k, sum_c);
     for (unsigned i = 0; i < sz; i++) {
         qm().div(d, ds[i], k);
         qm().mul(ns[i], k, ns[i]);
     }
     subpaving::var x;
     if (sz == 0) {
         qm().set(n, sum_c);
         x = subpaving::null_var;
     }
     else {
         x = s().mk_sum(sum_c, sz, ns.c_ptr(), xs.c_ptr());
         qm().set(n, 1);
     }
     cache_result(t, x, n, d);
     return x;
 }