Changeset abfc3b in git


Ignore:
Timestamp:
Feb 20, 2006, 4:00:59 PM (18 years ago)
Author:
Hans Schönemann <hannes@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
0b6919074bf78beca9b3294f6190ca7c2ff35518
Parents:
4c80eb75301d34b598b209761a9ebbb6273460c5
Message:
*hannes: gcd_poly


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

Legend:

Unmodified
Added
Removed
  • factory/cf_gcd.cc

    r4c80eb rabfc3b  
    11/* emacs edit mode for this file is -*- C++ -*- */
    2 /* $Id: cf_gcd.cc,v 1.39 2006-02-17 11:28:43 Singular Exp $ */
     2/* $Id: cf_gcd.cc,v 1.40 2006-02-20 15:00:59 Singular Exp $ */
    33
    44#include <config.h>
     
    2424#endif
    2525
    26 static CanonicalForm gcd_poly( const CanonicalForm & f, const CanonicalForm& g, bool modularflag );
     26static CanonicalForm gcd_poly( const CanonicalForm & f, const CanonicalForm& g, const bool modularflag );
    2727static CanonicalForm cf_content ( const CanonicalForm & f, const CanonicalForm & g );
    2828
     
    118118}
    119119//}}}
    120 
    121 //{{{ static CanonicalForm bcontent ( const CanonicalForm & f, const CanonicalForm & b )
    122 //{{{ docu
    123 //
    124 // bcontent() - return gcd of b and all coefficients of f which
    125 //   are in a basic domain.
    126 //
    127 // Used by gcd().
    128 //
    129 //}}}
    130 static CanonicalForm
    131 bcontent ( const CanonicalForm & f, const CanonicalForm & c )
    132 {
    133     if ( f.inBaseDomain() )
    134         return bgcd( f, c );
    135     else if ( f.inCoeffDomain() )
    136         return f.genOne();
    137     else {
    138         CanonicalForm g = c;
    139         for ( CFIterator i = f; i.hasTerms() && ! g.isOne(); i++ )
    140             g = bcontent( i.coeff(), g );
    141         if( g.lc().sign() < 0 )
    142             return -g;
    143         else
    144             return g;
    145     }
    146 }
    147 //}}}
    148 
    149120
    150121//{{{ CanonicalForm icontent ( const CanonicalForm & f )
     
    357328
    358329CanonicalForm
    359 gcd_poly1( const CanonicalForm & f, const CanonicalForm & g, bool modularflag )
     330gcd_poly1( const CanonicalForm & f, const CanonicalForm & g, const bool modularflag )
    360331{
    361332    CanonicalForm pi, pi1;
     
    431402int si_factor_reminder=1;
    432403static CanonicalForm
    433 gcd_poly ( const CanonicalForm & f, const CanonicalForm & g, bool modularflag )
    434 {
    435     if ( getCharacteristic() != 0 ) {
    436         if (! ( f.isUnivariate() && g.isUnivariate() ) ) {
    437             CFMap M, N;
    438             compress( f, g, M, N );
    439             CanonicalForm fM = M(f);
    440             CanonicalForm gM = M(g);
    441             if ( fM.mvar() != gM.mvar() ) {
    442                 if ( fM.mvar() > gM.mvar() )
    443                     return N( cf_content( fM, gM ) );
    444                 else
    445                     return N( cf_content( gM, fM ) );
    446             }
    447             else
    448                 return N( gcd_poly1( fM, gM, false ) );
    449         }
    450         else
    451             return gcd_poly1( f, g, false );
    452     }
    453     else if ( isOn( SW_USE_EZGCD ) && ! ( f.isUnivariate() && g.isUnivariate() ) ) {
     404gcd_poly ( const CanonicalForm & f, const CanonicalForm & g, const bool modularflag )
     405{
     406    if ( getCharacteristic() != 0 )
     407    {
     408      if ( f.mvar() != g.mvar() )
     409      {
     410        CFMap M, N;
     411        compress( f, g, M, N );
     412        CanonicalForm fM = M(f);
     413        CanonicalForm gM = M(g);
     414        //if ( fM.mvar() != gM.mvar() )
     415        //{
     416        //
     417        //  if ( fM.mvar() > gM.mvar() )
     418        //    return N( cf_content( fM, gM ) );
     419        //  else
     420        //    return N( cf_content( gM, fM ) );
     421        //}
     422        //else
     423            return N( gcd_poly1( fM, gM, false ) );
     424      }
     425      else
     426        return gcd_poly1( f, g, false );
     427    }
     428    else if ( isOn( SW_USE_EZGCD ) && ! ( f.isUnivariate() && g.isUnivariate() ) )
     429    {
    454430        CFMap M, N;
    455431        compress( f, g, M, N );
     
    516492    }
    517493    else
    518     {
    519         ASSERT(g==0,"invalid call of cf_gcd");
    520494        if ( f.sign() < 0 )
    521495            return -f;
    522496        else
    523497            return f;
    524     }
    525498}
    526499//}}}
     
    613586{
    614587    if ( f.isZero() )
    615     {
    616       if ( g.lc().sign() < 0 )
    617         return -g;
    618       else
    619        return g;
    620     }
     588        if ( g.lc().sign() < 0 )
     589            return -g;
     590        else
     591            return g;
    621592    else  if ( g.isZero() )
    622     {
    623       if ( f.lc().sign() < 0 )
    624         return -f;
    625       else
    626         return f;
    627     }
     593        if ( f.lc().sign() < 0 )
     594            return -f;
     595        else
     596            return f;
    628597    else  if ( f.inBaseDomain() )
    629         return bcontent( g, f );
     598        if ( g.inBaseDomain() )
     599            return bgcd( f, g );
     600        else
     601            return cf_content( g, f );
    630602    else  if ( g.inBaseDomain() )
    631         return bcontent( f, g );
     603        return cf_content( f, g );
    632604    else  if ( f.mvar() == g.mvar() )
    633605        if ( f.inExtension() && getReduce( f.mvar() ) )
     
    652624                CanonicalForm F = f * l, G = g * l;
    653625                Off( SW_RATIONAL );
    654                 do { l = gcd_poly( F, G, true );
    655                 //if ((!divides(l,F)) || (!divides(l,G)))
    656                 //{printf("fehler\n");
    657                 //cout<<"F="<<F<<"\nG="<<G<<"wrong gcd="<<l<<"\n";
    658                 //}
    659                 }
    660                 while (0); //((!divides(l,F)) || (!divides(l,G)));
     626                do { l = gcd_poly( F, G, true ); }
     627                while ((!divides(l,F)) || (!divides(l,G)));
    661628                On( SW_RATIONAL );
    662629                if ( l.lc().sign() < 0 )
     
    667634            else {
    668635                CanonicalForm d;
    669                 do{ d = gcd_poly( f, g, getCharacteristic()==0 );
    670                 //if ((!divides(d,f)) || (!divides(d,g)))
    671                 //{printf("fehler2\n"); cout<<"F="<<f<<"\nG="<<g<<"wrong gcd="<<d<<"\n";
    672                 //}
    673                 }
    674                 while (0);//((!divides(d,f)) || (!divides(d,g)));
     636                do{ d = gcd_poly( f, g, getCharacteristic()==0 ); }
     637                while ((!divides(d,f)) || (!divides(d,g)));
    675638                if ( d.lc().sign() < 0 )
    676639                    return -d;
Note: See TracChangeset for help on using the changeset viewer.