Changeset 3bc0f16 in git


Ignore:
Timestamp:
Apr 11, 2000, 4:48:25 PM (24 years ago)
Author:
Hans Schönemann <hannes@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
fe06960a5d598951cf3fc52947688afb04933d17
Parents:
78f2216c4ff0ad23f68b4cdfcdbeabbd8107d8f3
Message:
*hannes: more GCD fixes


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

Legend:

Unmodified
Added
Removed
  • Singular/clapsing.cc

    r78f221 r3bc0f16  
    33*  Computer Algebra System SINGULAR     *
    44****************************************/
    5 // $Id: clapsing.cc,v 1.62 2000-04-11 14:09:39 Singular Exp $
     5// $Id: clapsing.cc,v 1.63 2000-04-11 14:48:25 Singular Exp $
    66/*
    77* ABSTRACT: interface between Singular and factory
     
    499499    return;
    500500  }
    501 
    502   if (rField_is_Zp_a())
    503   {
    504     setCharacteristic( -nGetChar() );
    505   }
    506   else if (rField_is_Q_a())
    507   {
    508     setCharacteristic( 0 );
    509   }
    510501  else
    511     return; /* not implemented R, long R, long C, GF, Z/p */
    512 
    513   CFList L;
    514   CanonicalForm g, h;
    515   poly p = pNext(f);
    516 
    517   // first attemp: find 2 smallest g:
    518 
    519   number g1=pGetCoeff(f);
    520   number g2=pGetCoeff(p); // p==pNext(f);
    521   pIter(p);
    522   int sz1=nSize(g1);
    523   int sz2=nSize(g2);
    524   if (sz1>sz2)
    525   {
    526     number gg=g1;
    527     g1=g2; g2=gg;
    528     int sz=sz1;
    529     sz1=sz2; sz2=sz;
    530   }
    531   while (p!=NULL)
    532   {
    533     int n_sz=nSize(pGetCoeff(p));
    534     if (n_sz<sz1)
    535     {
    536       sz2=sz1;
    537       g2=g1;
    538       g1=pGetCoeff(p);
    539       sz1=n_sz;
    540       if (sz1<=3) break;
    541     }
    542     else if(n_sz<sz2)
    543     {
    544       sz2=n_sz;
    545       g2=pGetCoeff(p);
    546       sz2=n_sz;
    547     }
     502  {
     503    if ( nGetChar() == 1 )
     504      setCharacteristic( 0 );
     505    else  if ( nGetChar() == -1 )
     506      return; /* not implemented for R */
     507    else  if ( nGetChar() < 0 )
     508      setCharacteristic( -nGetChar() );
     509    else if (currRing->parameter==NULL) /* not GF(q) */
     510      setCharacteristic( nGetChar() );
     511    else
     512      return; /* not implemented*/
     513
     514    CFList L;
     515    CanonicalForm g, h;
     516    poly p = pNext(f);
     517
     518    // first attemp: find 2 smallest g:
     519
     520    number g1=pGetCoeff(f);
     521    number g2=pGetCoeff(p); // p==pNext(f);
    548522    pIter(p);
    549   }
    550   if (sz1 > 4) return; // do only a simple gcd
    551   FACTORY_ALGOUT( "G", ((lnumber)g1)->z );
    552   g = convSingTrClapP( ((lnumber)g1)->z );
    553   g = gcd( g, convSingTrClapP( ((lnumber)g2)->z ));
    554 
    555   // second run: gcd's
    556 
    557   p = f;
    558   TIMING_START( contentTimer );
    559   while ( (p != NULL) && (g != 1)  && ( g != 0))
    560   {
    561     FACTORY_ALGOUT( "h", (((lnumber)pGetCoeff(p))->z) );
    562     h = convSingTrClapP( ((lnumber)pGetCoeff(p))->z );
    563     pIter( p );
    564     g = gcd( g, h );
    565     L.append( h );
     523    int sz1=nSize(g1);
     524    int sz2=nSize(g2);
     525    if (sz1>sz2)
     526    {
     527      number gg=g1;
     528      g1=g2; g2=gg;
     529      int sz=sz1;
     530      sz1=sz2; sz2=sz;
     531    }
     532    while (p!=NULL)
     533    {
     534      int n_sz=nSize(pGetCoeff(p));
     535      if (n_sz<sz1)
     536      {
     537        sz2=sz1;
     538        g2=g1;
     539        g1=pGetCoeff(p);
     540        sz1=n_sz;
     541        if (sz1<=3) break;
     542      }
     543      else if(n_sz<sz2)
     544      {
     545        sz2=n_sz;
     546        g2=pGetCoeff(p);
     547        sz2=n_sz;
     548      }
     549      pIter(p);
     550    }
     551    FACTORY_ALGOUT( "G", ((lnumber)g1)->z );
     552    g = convSingTrClapP( ((lnumber)g1)->z );
     553    g = gcd( g, convSingTrClapP( ((lnumber)g2)->z ));
     554
     555    // second run: gcd's
     556
     557    p = f;
     558    TIMING_START( contentTimer );
     559    while ( (p != NULL) && (g != 1)  && ( g != 0))
     560    {
     561      FACTORY_ALGOUT( "h", (((lnumber)pGetCoeff(p))->z) );
     562      h = convSingTrClapP( ((lnumber)pGetCoeff(p))->z );
     563      pIter( p );
     564#ifdef FACTORY_GCD_STAT
     565      // save g
     566      CanonicalForm gOld = g;
     567#endif
     568
     569#ifdef FACTORY_GCD_TEST
     570      g = CFPrimitiveGcdUtil::gcd( g, h );
     571#else
     572      g = gcd( g, h );
     573#endif
     574
     575      FACTORY_GCDSTAT( "gcnt:", gOld, h, g );
     576      FACTORY_CFTROUT( "g", g );
     577      L.append( h );
     578    }
     579    TIMING_END( contentTimer );
     580    FACTORY_CONTSTAT( "cont:", g );
    566581    if (( g == 1 ) || (g == 0))
    567582    {
    568583      pTest(f);
    569       #ifdef LDEBUG
    570       PrintS("=> gcd 0 in divide_content\n");
    571       #endif
    572584      return;
    573585    }
     
    12711283void singclap_algdividecontent ( alg f, alg g, alg &ff, alg &gg )
    12721284{
    1273  On(SW_USE_SPARSEMOD);
    12741285 FACTORY_ALGOUT( "f", f );
    12751286 FACTORY_ALGOUT( "g", g );
     
    12911302   GCD=CFPrimitiveGcdUtil::gcd( F, G );
    12921303#else
    1293    GCD=gcd ( F, G );
     1304   GCD=gcd( F, G );
    12941305#endif
    12951306   TIMING_END( algContentTimer );
     
    12981309   FACTORY_GCDSTAT( "acnt:", F, G, GCD );
    12991310
    1300    if ((GCD!=1) && (GCD != 0))
     1311   if ((GCD!=1) && (GCD=!0))
    13011312   {
    13021313     ff= convClapASingA( F/ GCD );
     
    13201331   FACTORY_GCDSTAT( "acnt:", F, G, GCD );
    13211332
    1322    if ((GCD!=1) && (GCD != 0))
     1333   if ((GCD!=1) && (GCD!=0))
    13231334   {
    13241335     ff= convClapPSingTr( F/ GCD );
Note: See TracChangeset for help on using the changeset viewer.