本文整理汇总了C++中Polynomial::getSugar方法的典型用法代码示例。如果您正苦于以下问题:C++ Polynomial::getSugar方法的具体用法?C++ Polynomial::getSugar怎么用?C++ Polynomial::getSugar使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Polynomial
的用法示例。
在下文中一共展示了Polynomial::getSugar方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: while
void Polynomial::operator-=(const Polynomial &p)
{
if(p.terms.empty())return; //added May 7 2005
if(p.getSugar()>sugar)sugar=p.getSugar();
// fast subtraction
//TimerScope ts(&polynomialTimer);
TermMap::iterator i=terms.lower_bound(p.terms.begin()->first);
for(TermMap::const_iterator j=p.terms.begin();j!=p.terms.end();j++)
{
while(i!=terms.end() && (terms.value_comp()(*i,*j)))i++;
if(i==terms.end())
{
terms.insert(i,TermMap::value_type(j->first,-j->second));
}
else
{
if(!terms.value_comp()(*j,*i))
{ // they must be equal
FieldElement c=i->second-j->second;
if(c.isZero())
{
// if(i->fist.exponent==marked.exponent)marked=Term);
TermMap::iterator oldI=i;
i++;
terms.erase(oldI);
}
else
{
i->second=c;
}
}
else
{
terms.insert(i,TermMap::value_type(j->first,-j->second));
}
}
}
// slow subtraction
/* for(TermMap::const_iterator i=p.terms.begin();i!=p.terms.end();i++)
{
if(terms.count(i->first)==1)
{
terms[i->first]=terms[i->first]-i->second;
if(terms[i->first].isZero())terms.erase(i->first);
}
else
terms[i->first]=-i->second;
}
*/
}
示例2: madd
void Polynomial::madd(const Term &m, const Polynomial &p)
{
if(p.terms.empty())return; //added May 7 2005
int sugar2=p.getSugar()+m.m.exponent.sum();
if(sugar2>sugar)sugar=sugar2;
TermMap::iterator i=terms.lower_bound(Monomial(theRing,p.terms.begin()->first.exponent+m.m.exponent));
for(TermMap::const_iterator j=p.terms.begin();j!=p.terms.end();j++)
{
while(i!=terms.end() && TermMapCompare()(i->first,Monomial(theRing,j->first.exponent+m.m.exponent)))i++;
if(i==terms.end())
{
terms.insert(i,TermMap::value_type(Monomial(theRing,j->first.exponent+m.m.exponent),j->second*m.c));
}
else
{
if(!TermMapCompare()(Monomial(theRing,j->first.exponent+m.m.exponent),i->first))
{ // they must be equal
FieldElement c=i->second+j->second*m.c;
if(c.isZero())
{
TermMap::iterator oldI=i;
i++;
terms.erase(oldI);
}
else
{
i->second=c;
}
}
else
{
terms.insert(i,TermMap::value_type(Monomial(theRing,j->first.exponent+m.m.exponent),j->second*m.c));
}
}
}
}