Changeset c495ca in git


Ignore:
Timestamp:
Feb 11, 2013, 11:17:23 AM (11 years ago)
Author:
Martin Lee <martinlee84@…>
Branches:
(u'spielwiese', 'd1b01e9d51ade4b46b745d3bada5c5f3696be3a8')
Children:
3a3393b2348060418dd1091d7fd2aeeec607740c
Parents:
1176ba0e57d133e7f6c1f50dca18b4170c0de3b6
git-author:
Martin Lee <martinlee84@web.de>2013-02-11 11:17:23+01:00
git-committer:
Martin Lee <martinlee84@web.de>2013-02-18 15:16:17+01:00
Message:
chg: some optimizations to psr gcd
File:
1 edited

Legend:

Unmodified
Added
Removed
  • factory/cf_gcd.cc

    r1176ba0 rc495ca  
    607607gcd_poly_p( const CanonicalForm & f, const CanonicalForm & g )
    608608{
     609    if (f.inCoeffDomain() || g.inCoeffDomain()) //zero case should be caught by gcd
     610      return 1;
    609611    CanonicalForm pi, pi1;
    610612    CanonicalForm C, Ci, Ci1, Hi, bi, pi2;
    611     bool bpure;
     613    bool bpure, ezgcdon= isOn (SW_USE_EZGCD_P);
    612614    int delta = degree( f ) - degree( g );
    613615
     
    620622        pi = g; pi1 = f; delta = -delta;
    621623    }
    622     On (SW_USE_EZGCD_P);
    623     Ci = content( pi ); Ci1 = content( pi1 );
    624     Off (SW_USE_EZGCD_P);
    625     pi1 = pi1 / Ci1; pi = pi / Ci;
     624    if (pi.isUnivariate())
     625      Ci= 1;
     626    else
     627    {
     628      if (!ezgcdon)
     629        On (SW_USE_EZGCD_P);
     630      Ci = content( pi );
     631      if (!ezgcdon)
     632        Off (SW_USE_EZGCD_P);
     633      pi = pi / Ci;
     634    }
     635    if (pi1.isUnivariate())
     636      Ci1= 1;
     637    else
     638    {
     639      if (!ezgcdon)
     640        On (SW_USE_EZGCD_P);
     641      Ci1 = content( pi1 );
     642      if (!ezgcdon)
     643        Off (SW_USE_EZGCD_P);
     644      pi1 = pi1 / Ci1;
     645    }
    626646    C = gcd( Ci, Ci1 );
    627647    int d= 0;
     
    685705        pi = pi1; pi1 = pi2;
    686706        maxNumVars= tmax (getNumVars (pi), getNumVars (pi1));
    687         if (!(pi1.isUnivariate()) && (size (pi1)/maxNumVars > 500))
     707        if (!pi1.isUnivariate() && (size (pi1)/maxNumVars > 500))
    688708        {
    689709            On (SW_USE_FF_MOD_GCD);
     
    703723            if (!(pi.isUnivariate() && pi1.isUnivariate()))
    704724            {
    705               if (size (Hi)*size (pi)/(maxNumVars*3) > 500) //maybe this needs more tuning
     725              if (size (Hi)*size (pi)/(maxNumVars*3) > 1500) //maybe this needs more tuning
    706726              {
    707727                On (SW_USE_FF_MOD_GCD);
     
    719739      return C;
    720740    }
    721     pi /= content( pi );
     741    if (!pi.isUnivariate())
     742    {
     743      if (!ezgcdon)
     744        On (SW_USE_EZGCD_P);
     745      Ci= gcd (LC (oldPi,v), LC (oldPi1,v));
     746      pi /= LC (pi,v)/Ci;
     747      Ci= content (pi);
     748      pi /= Ci;
     749      if (!ezgcdon)
     750        Off (SW_USE_EZGCD_P);
     751    }
    722752    if ( bpure )
    723753        pi /= pi.lc();
Note: See TracChangeset for help on using the changeset viewer.