Changeset ed9927 in git for factory/cf_gcd.cc


Ignore:
Timestamp:
Jan 11, 2008, 12:09:04 PM (16 years ago)
Author:
Hans Schönemann <hannes@…>
Branches:
(u'spielwiese', '4a9821a93ffdc22a6696668bd4f6b8c9de3e6c5f')
Children:
b6e288f4c0fa89ce14c94afd004ec80ab76e77db
Parents:
9c6f160523432eef41813f0d4f8f9a8aafb16b12
Message:
*Hannes: next try


git-svn-id: file:///usr/local/Singular/svn/trunk@10504 2c84dea3-7e68-4137-9b89-c4e89433aadc
File:
1 edited

Legend:

Unmodified
Added
Removed
  • factory/cf_gcd.cc

    r9c6f16 red9927  
    11/* emacs edit mode for this file is -*- C++ -*- */
    2 /* $Id: cf_gcd.cc,v 1.59 2008-01-07 13:33:10 Singular Exp $ */
     2/* $Id: cf_gcd.cc,v 1.60 2008-01-11 11:09:04 Singular Exp $ */
    33
    44#include <config.h>
     
    475475  int mp, cc, p1, pe;
    476476  mp = f.level()+1;
     477  bool fc_isUnivariate=f.isUnivariate();
     478  bool gc_isUnivariate=g.isUnivariate();
     479  bool fc_and_gc_Univariate=fc_isUnivariate && gc_isUnivariate;
    477480#if 1
    478481  if (( getCharacteristic() == 0 )
     
    480483  && (g.level() >4)
    481484  && isOn( SW_USE_CHINREM_GCD)
    482   && (!f.isUnivariate())
    483   && (!g.isUnivariate())
     485  && (!fc_and_gc_Univariate)
    484486  && (isPurePoly_m(f))
    485487  && (isPurePoly_m(g))
     
    489491  }
    490492#endif
    491   bool fc_isUnivariate=f.isUnivariate();
    492   bool fc_and_gc_Univariate=fc_isUnivariate && g.isUnivariate();
     493  cf_prepgcd( f, g, cc, p1, pe);
     494  if ( cc != 0 )
     495  {
     496    if ( cc > 0 )
     497    {
     498      fc = replacevar( f, Variable(cc), Variable(mp) );
     499      gc = g;
     500    }
     501    else
     502    {
     503      fc = replacevar( g, Variable(-cc), Variable(mp) );
     504      gc = f;
     505    }
     506    return cf_content( fc, gc );
     507  }
     508// now each appearing variable is in f and g
     509  fc = f;
     510  gc = g;
     511  if( gcd_avoid_mtaildegree ( fc, gc, d1 ) )
     512      return d1;
    493513  if ( getCharacteristic() != 0 )
    494514  {
    495515    if (isOn( SW_USE_EZGCD_P ) && (!fc_and_gc_Univariate))
    496516    {
    497         return fin_ezgcd( f, g );
     517      if ( pe == 1 )
     518        fc = fin_ezgcd( fc, gc );
     519      else if ( pe > 0 )// no variable at position 1
     520      {
     521        fc = replacevar( fc, Variable(pe), Variable(1) );
     522        gc = replacevar( gc, Variable(pe), Variable(1) );
     523        fc = replacevar( fin_ezgcd( fc, gc ), Variable(1), Variable(pe) );
     524      }
     525      else
     526      {
     527        pe = -pe;
     528        fc = swapvar( fc, Variable(pe), Variable(1) );
     529        gc = swapvar( gc, Variable(pe), Variable(1) );
     530        fc = swapvar( fin_ezgcd( fc, gc ), Variable(1), Variable(pe) );
     531      }
    498532    }
    499533    else if (isOn(SW_USE_GCD_P))
    500534    {
    501       return newGCD(f,g);
    502     }
    503     else
    504     {
    505       cf_prepgcd( f, g, cc, p1, pe);
    506       if ( cc != 0 )
    507       {
    508         if ( cc > 0 )
    509         {
    510           fc = replacevar( f, Variable(cc), Variable(mp) );
    511           gc = g;
    512         }
    513         else
    514         {
    515           fc = replacevar( g, Variable(-cc), Variable(mp) );
    516           gc = f;
    517         }
    518         return cf_content( fc, gc );
    519       }
    520       // now each appearing variable is in f and g
    521       fc = f;
    522       gc = g;
    523       if( gcd_avoid_mtaildegree ( fc, gc, d1 ) )
    524         return d1;
     535      fc=newGCD(fc,gc);
     536    }
     537    else if ( p1 == fc.level() )
     538      fc = gcd_poly_p( fc, gc );
     539    else
     540    {
     541      fc = replacevar( fc, Variable(p1), Variable(mp) );
     542      gc = replacevar( gc, Variable(p1), Variable(mp) );
     543      fc = replacevar( gcd_poly_p( fc, gc ), Variable(mp), Variable(p1) );
     544    }
     545  }
     546  else if (!fc_and_gc_Univariate)
     547  {
     548    if (
     549    isOn(SW_USE_CHINREM_GCD)
     550    && (gc.level() >5)
     551    && (fc.level() >5)
     552    && (isPurePoly_m(fc)) && (isPurePoly_m(gc))
     553    )
     554    {
     555    #if 0
    525556      if ( p1 == fc.level() )
    526         fc = gcd_poly_p( fc, gc );
     557        fc = chinrem_gcd( fc, gc );
    527558      else
    528559      {
    529560        fc = replacevar( fc, Variable(p1), Variable(mp) );
    530561        gc = replacevar( gc, Variable(p1), Variable(mp) );
    531         fc = replacevar( gcd_poly_p( fc, gc ), Variable(mp), Variable(p1) );
    532       }
    533     }
    534   }
    535   else if (!fc_and_gc_Univariate)
    536   {
    537     if (
    538     isOn(SW_USE_CHINREM_GCD)
    539     && (g.level() >5)
    540     && (f.level() >5)
    541     && (isPurePoly_m(f)) && (isPurePoly_m(g))
    542     )
    543     {
    544       return chinrem_gcd( f, g);
     562        fc = replacevar( chinrem_gcd( fc, gc ), Variable(mp), Variable(p1) );
     563      }
     564    #else
     565      fc = chinrem_gcd( fc, gc);
     566    #endif
    545567    }
    546568    if ( isOn( SW_USE_EZGCD ) )
    547569    {
    548       return ezgcd( f, g );
     570      if ( pe == 1 )
     571        fc = ezgcd( fc, gc );
     572      else if ( pe > 0 )// no variable at position 1
     573      {
     574        fc = replacevar( fc, Variable(pe), Variable(1) );
     575        gc = replacevar( gc, Variable(pe), Variable(1) );
     576        fc = replacevar( ezgcd( fc, gc ), Variable(1), Variable(pe) );
     577      }
     578      else
     579      {
     580        pe = -pe;
     581        fc = swapvar( fc, Variable(pe), Variable(1) );
     582        gc = swapvar( gc, Variable(pe), Variable(1) );
     583        fc = swapvar( ezgcd( fc, gc ), Variable(1), Variable(pe) );
     584      }
    549585    }
    550586    else if (
    551587    isOn(SW_USE_CHINREM_GCD)
    552     && (isPurePoly_m(f)) && (isPurePoly_m(g))
     588    && (isPurePoly_m(fc)) && (isPurePoly_m(gc))
    553589    )
    554590    {
    555       return chinrem_gcd( f, g);
    556     }
    557     else
    558     {
    559       cf_prepgcd( f, g, cc, p1, pe);
    560       if ( cc != 0 )
    561       {
    562         if ( cc > 0 )
    563         {
    564           fc = replacevar( f, Variable(cc), Variable(mp) );
    565           gc = g;
    566         }
    567         else
    568         {
    569           fc = replacevar( g, Variable(-cc), Variable(mp) );
    570           gc = f;
    571         }
    572         return cf_content( fc, gc );
    573       }
    574       // now each appearing variable is in f and g
    575       fc = f;
    576       gc = g;
    577       if( gcd_avoid_mtaildegree ( fc, gc, d1 ) )
    578         return d1;
    579       fc = gcd_poly_0( fc, gc );
     591    #if 0
     592      if ( p1 == fc.level() )
     593        fc = chinrem_gcd( fc, gc );
     594      else
     595      {
     596        fc = replacevar( fc, Variable(p1), Variable(mp) );
     597        gc = replacevar( gc, Variable(p1), Variable(mp) );
     598        fc = replacevar( chinrem_gcd( fc, gc ), Variable(mp), Variable(p1) );
     599      }
     600    #else
     601      fc = chinrem_gcd( fc, gc);
     602    #endif
     603    }
     604    else
     605    {
     606       fc = gcd_poly_0( fc, gc );
    580607    }
    581608  }
    582609  else
    583610  {
    584     cf_prepgcd( f, g, cc, p1, pe);
    585     if ( cc != 0 )
    586     {
    587       if ( cc > 0 )
    588       {
    589         fc = replacevar( f, Variable(cc), Variable(mp) );
    590         gc = g;
    591       }
    592       else
    593       {
    594         fc = replacevar( g, Variable(-cc), Variable(mp) );
    595         gc = f;
    596       }
    597       return cf_content( fc, gc );
    598     }
    599     // now each appearing variable is in f and g
    600     fc = f;
    601     gc = g;
    602     if( gcd_avoid_mtaildegree ( fc, gc, d1 ) )
    603       return d1;
    604611    fc = gcd_poly_0( fc, gc );
    605612  }
Note: See TracChangeset for help on using the changeset viewer.