Exemplo n.º 1
0
void UniMulFC(poly_fc & r,poly_fc & f,poly_fc & g)
{
	uint sa=f.size(),sb=g.size();
	if(sa==0||sb==0)
	{
		r.resize(0);
		return ;
	}
	uint sx = sa+sb-1;
	r.resize(sx);
	int i, j, jmin, jmax;
	static mpfc_t t, accum;
	mpfc_init(t); mpfc_init(accum);
	for (i = 0; i < sx; i++) {
		jmin = std::max<int>(0, i-sb+1);
		jmax = std::min<int>(sa-1, i);
		mpfc_set_ui(accum,0);
		for (j = jmin; j <= jmax; j++) {
			mpfc_mul(t, f[j], g[i-j]);
			mpfc_add(accum, accum, t);
		}
		mpfc_set(r[i], accum);
	}
	mpfc_clear(t); mpfc_clear(accum);
}
Exemplo n.º 2
0
void ComplexInitialize()
{
	FC_DEFAULT_PREC=100;
	mpf_init(mpfc_mpf_temp[0]);
	mpf_init(mpfc_mpf_temp[1]);
	mpf_init(mpfc_mpf_temp[2]);
	mpf_init(mpfc_mpf_temp[3]);
	mpfc_init(mpfc_one);mpfc_set_ui(mpfc_one,1);
	mpfc_init(mpfc_zero);mpfc_set_ui(mpfc_zero,0);
	return ;
}
Exemplo n.º 3
0
void UniDivFC(poly_fc & q,poly_fc & f,poly_fc & g)
{
	poly_fc r;
	int k,n;
	r.resize(f.size());
	for(int i=0;i<f.size();i++)mpfc_set(r[i],f[i]);
	n=g.size()-1;
	k=r.size()-g.size();
	if(k<0)
	{
		q.resize(0);return;
	}
	q.resize(k+1);
	mpfc_t t;
	mpfc_init(t);
	do 
	{
		mpfc_div(q[k],r[n+k],g[n]);
		if(!mpfc_iszero(q[k]))
		{
			for(int i=0;i<n;i++)
			{
				uint j=n+k-1-i;
				mpfc_mul(t,q[k],g[j-k]);
				mpfc_sub(r[j],r[j],t);
			}
		}
	} while (k--);
	mpfc_clear(t);
	r.resize(0);
}
Exemplo n.º 4
0
void poly_fc::resize(uint n)
{
	uint m=this->rep.size();
	if(n>m)
	{
		this->rep.resize(n);
		for(uint i=m;i<n;i++)
		{
			this->rep[i]=new mpfc;
			mpfc_init(this->rep[i]);
		}
	}
	else if(n<m)
	{
		for(uint i=n;i<m;i++)
		{
			mpfc_clear(this->rep[i]);
			delete this->rep[i];
		}
		this->rep.resize(n);
	}
	return ;
}
Exemplo n.º 5
0
 void init() { mpfc_init(&value,53); }
Exemplo n.º 6
0
 void set_zero(elem &result) const {
   mpfc_init(&result, R->get_precision());
   mpfc_set_si(&result, 0);
 }