Changeset 26fc59 in git


Ignore:
Timestamp:
Jun 24, 2013, 4:33:12 PM (11 years ago)
Author:
Martin Lee <martinlee84@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
47310215b203f48bdcb8ddd5548d21c99d84717a
Parents:
13a03bf0c76a48e756ec7fbd4e7c57a45432e301
git-author:
Martin Lee <martinlee84@web.de>2013-06-24 16:33:12+02:00
git-committer:
Martin Lee <martinlee84@web.de>2013-07-22 15:49:53+02:00
Message:
chg: got rid of Farey in chinrem_gcd
File:
1 edited

Legend:

Unmodified
Added
Removed
  • factory/cf_gcd.cc

    r13a03b r26fc59  
    480480//
    481481//}}}
     482
    482483static CanonicalForm
    483 balance_p ( const CanonicalForm & f, const CanonicalForm & q )
     484balance_p ( const CanonicalForm & f, const CanonicalForm & q, const CanonicalForm & qh )
    484485{
    485486    Variable x = f.mvar();
    486     CanonicalForm result = 0, qh = q / 2;
     487    CanonicalForm result = 0;
    487488    CanonicalForm c;
    488489    CFIterator i;
     
    498499        }
    499500        else
    500           result += power( x, i.exp() ) * balance_p(c,q);
     501          result += power( x, i.exp() ) * balance_p(c,q,qh);
    501502    }
    502503    return result;
     504}
     505
     506static CanonicalForm
     507balance_p ( const CanonicalForm & f, const CanonicalForm & q )
     508{
     509    CanonicalForm qh = q / 2;
     510    return balance_p (f, q, qh);
    503511}
    504512
     
    12691277TIMING_DEFINE_PRINT(chinrem_termination)
    12701278TIMING_DEFINE_PRINT(chinrem_recursion)
    1271 TIMING_DEFINE_PRINT(chinrem_reconstruction)
    12721279
    12731280CanonicalForm chinrem_gcd ( const CanonicalForm & FF, const CanonicalForm & GG )
    12741281{
    1275   CanonicalForm f, g, cl, q(0), Dp, newD, D, newq;
     1282  CanonicalForm f, g, cl, q(0), Dp, newD, D, newq, newqh;
    12761283  int p, i, dp_deg, d_deg=-1;
    12771284
     
    12931300
    12941301  CanonicalForm Dn, test= 0;
     1302  CanonicalForm lcf, lcg;
     1303  lcf= f.lc();
     1304  lcg= g.lc();
    12951305  cl =  gcd (f.lc(),g.lc());
    12961306  CanonicalForm gcdcfcg= gcd (cf, cg);
     
    13221332  i = cf_getNumBigPrimes() - 1;
    13231333
    1324   CanonicalForm cof, cog, cofp, cogp, newCof, newCog, cofn, cogn;
     1334  CanonicalForm cof, cog, cofp, cogp, newCof, newCog, cofn, cogn, cDn;
    13251335  int maxNumVars= tmax (getNumVars (f), getNumVars (g));
    13261336  //Off (SW_RATIONAL);
     
    13561366                          "time for gcd mod p in modular gcd: ");
    13571367    Dp /=Dp.lc();
     1368    Dp *= mapinto (cl);
    13581369    cofp /= lc (cofp);
     1370    cofp *= mapinto (lcf);
    13591371    cogp /= lc (cogp);
     1372    cogp *= mapinto (lcg);
    13601373    setCharacteristic( 0 );
    13611374    dp_deg=totaldegree(Dp);
     
    13721385      d_deg=dp_deg;
    13731386      q = p;
     1387      Dn= balance_p (D, p);
     1388      cofn= balance_p (cof, p);
     1389      cogn= balance_p (cog, p);
    13741390    }
    13751391    else
     
    13821398        cof= newCof;
    13831399        cog= newCog;
     1400        newqh= newq/2;
     1401        Dn= balance_p (newD, newq, newqh);
     1402        cofn= balance_p (newCof, newq, newqh);
     1403        cogn= balance_p (newCog, newq, newqh);
     1404        if (test != Dn) //balance_p (newD, newq))
     1405          test= balance_p (newD, newq);
     1406        else
     1407          equal= true;
    13841408        q = newq;
    13851409        D = newD;
     
    13961420        test= 0;
    13971421        equal= false;
     1422        Dn= balance_p (D, p);
     1423        cofn= balance_p (cof, p);
     1424        cogn= balance_p (cog, p);
    13981425      }
    13991426      else
     
    14051432    if ( i >= 0 )
    14061433    {
    1407       TIMING_START (chinrem_reconstruction);
    1408       Dn= Farey(D,q);
    1409       cofn= Farey(cof,q);
    1410       cogn= Farey(cog,q);
    1411       TIMING_END_AND_PRINT (chinrem_reconstruction,
    1412                            "time for rational reconstruction in modular gcd: ");
    1413       int is_rat= isOn (SW_RATIONAL);
    1414       On (SW_RATIONAL);
    1415       cd = bCommonDen( Dn ); // we need On(SW_RATIONAL)
    1416       cofn *= bCommonDen (cofn);
    1417       cogn *= bCommonDen (cogn);
    1418       if (!is_rat)
    1419         Off (SW_RATIONAL);
    1420       Dn *=cd;
    1421       if (test != Dn)
    1422         test= Dn;
    1423       else
    1424         equal= true;
    1425       //Dn /=vcontent(Dn,Variable(1));
     1434      cDn= icontent (Dn);
     1435      Dn /= cDn;
     1436      cofn /= cl/cDn;
     1437      //cofn /= icontent (cofn);
     1438      cogn /= cl/cDn;
     1439      //cogn /= icontent (cogn);
    14261440      TIMING_START (chinrem_termination);
    14271441      if ((terminationTest (f,g, cofn, cogn, Dn)) ||
Note: See TracChangeset for help on using the changeset viewer.