Changeset 8cfc91 in git


Ignore:
Timestamp:
Apr 9, 2019, 3:34:09 PM (4 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', '8d54773d6c9e2f1d2593a28bc68b7eeab54ed529')
Children:
fcf6c47c06265d4de6796b8f705ab3c850722903
Parents:
71d8cc963194f7a7d75dd63c8856982987161c3c
Message:
fix: better limit for overflow test in subst
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • Singular/iparith.cc

    r71d8cc r8cfc91  
    65506550  if (ringvar>0)
    65516551  {
    6552     if ((monomexpr!=NULL) && (p!=NULL) && (pTotaldegree(p)!=0) &&
    6553     ((unsigned long)pTotaldegree(monomexpr) > (currRing->bitmask / (unsigned long)pTotaldegree(p)/2)))
    6554     {
    6555       Warn("possible OVERFLOW in subst, max exponent is %ld, substituting deg %d by deg %d",currRing->bitmask/2, pTotaldegree(monomexpr), pTotaldegree(p));
     6552    int mm=p_MaxExpPerVar(p,ringvar,currRing);
     6553    if ((monomexpr!=NULL) && (p!=NULL) && (mm!=0) &&
     6554    ((unsigned long)pTotaldegree(monomexpr) > (currRing->bitmask / (unsigned long)mm/2)))
     6555    {
     6556      Warn("possible OVERFLOW in subst, max exponent is %ld, substituting deg %d by deg %d",currRing->bitmask/2, pTotaldegree(monomexpr), mm);
    65566557      //return TRUE;
    65576558    }
     
    65836584      {
    65846585        poly p=id->m[i];
    6585         if ((p!=NULL) && (pTotaldegree(p)!=0) &&
    6586         ((unsigned long)deg_monexp > (currRing->bitmask / (unsigned long)pTotaldegree(p)/2)))
     6586        int mm=p_MaxExpPerVar(p,ringvar,currRing);
     6587        if ((p!=NULL) && (mm!=0) &&
     6588        ((unsigned long)deg_monexp > (currRing->bitmask / (unsigned long)mm/2)))
    65876589        {
    65886590          overflow=TRUE;
  • libpolys/polys/monomials/p_polys.cc

    r71d8cc r8cfc91  
    48954895}
    48964896
     4897int p_MaxExpPerVar(poly p, int i, const ring r)
     4898{
     4899  int m=0;
     4900  while(p!=NULL)
     4901  {
     4902    int mm=p_GetExp(p,i,r);
     4903    if (mm>m) m=mm;
     4904    pIter(p);
     4905  }
     4906  return m;
     4907}
     4908
  • libpolys/polys/monomials/p_polys.h

    r71d8cc r8cfc91  
    20852085/// divide polynomial by monomial
    20862086poly p_Div_mm(poly p, const poly m, const ring r);
     2087
     2088
     2089/// max exponent of variable x_i in p
     2090int p_MaxExpPerVar(poly p, int i, const ring r);
    20872091#endif // P_POLYS_H
    20882092
Note: See TracChangeset for help on using the changeset viewer.