Changeset dfa849 in git


Ignore:
Timestamp:
Aug 15, 2013, 11:52:09 AM (10 years ago)
Author:
Martin Lee <martinlee84@…>
Branches:
(u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', 'f875bbaccd0831e36aaed09ff6adeb3eb45aeb94')
Children:
f36755e8e4a754eb8a49487d0e998ed26a2b2c78
Parents:
5c6ceaf5ab0029bc759f3ded4a97613e94d728b0
git-author:
Martin Lee <martinlee84@web.de>2013-08-15 11:52:09+02:00
git-committer:
Martin Lee <martinlee84@web.de>2013-08-30 13:48:32+02:00
Message:
chg: compute mipo wrt. x and y
chg: more checks of mipos
File:
1 edited

Legend:

Unmodified
Added
Removed
  • factory/facAbsBiFact.cc

    r5c6cea rdfa849  
    318318  bool yValid= !(Gpy.inCoeffDomain() || smallestFactorEvaly.inCoeffDomain() ||
    319319               !gcd (Gpy, smallestFactorEvaly).inCoeffDomain());
    320   if (!xValid && !yValid)
     320  if (!xValid || !yValid)
    321321  {
    322322    rec= true;
     
    329329  CanonicalForm mipo;
    330330
    331   int loop, i;
    332   if (xValid && yValid)
    333   {
    334     loop= 3;
    335     i=1;
    336   }
    337   else if (xValid)
    338   {
    339     loop= 3;
    340     i=2;
    341   }
    342   else
    343   {
    344     loop= 2;
    345     i=1;
    346   }
    347 
    348   CFArray mipos= CFArray (loop-i);
    349   for (; i < loop; i++)
     331  CFArray mipos= CFArray (2);
     332  CFFList mipoFactors;
     333  for (int i= 1; i < 3; i++)
    350334  {
    351335    CanonicalForm Fi= F(eval[i-1],i);
     
    424408    if (i == 2)
    425409    {
    426       NTLFpi= convertFacCF2NTLzzpX (smallestFactorEvalx/lc (smallestFactorEvalx));
    427       NTLGpi= convertFacCF2NTLzzpX (Gpx/lc (Gpx));
     410      NTLFpi=convertFacCF2NTLzzpX (smallestFactorEvalx/lc(smallestFactorEvalx));
     411      NTLGpi=convertFacCF2NTLzzpX (Gpx/lc (Gpx));
    428412    }
    429413    else
    430414    {
    431       NTLFpi= convertFacCF2NTLzzpX (smallestFactorEvaly/lc (smallestFactorEvaly));
    432       NTLGpi= convertFacCF2NTLzzpX (Gpy/lc (Gpy));
     415      NTLFpi=convertFacCF2NTLzzpX (smallestFactorEvaly/lc(smallestFactorEvaly));
     416      NTLGpi=convertFacCF2NTLzzpX (Gpy/lc (Gpy));
    433417    }
    434418    vec_zz_pX modFactors;
     
    475459      mipo += M (j,1)*power (x,s-j);
    476460
    477     CFFList mipoFactors= factorize (mipo);
    478     mipoFactors.removeFirst();
     461    mipoFactors= factorize (mipo);
     462    if (mipoFactors.getFirst().factor().inCoeffDomain())
     463      mipoFactors.removeFirst();
    479464
    480465#ifdef HAVE_FLINT
     
    490475
    491476    if (mipoFactors.length() > 1 ||
    492         (mipoFactors.length() == 1 && mipoFactors.getFirst().exp() > 1))
    493     {
    494       if (i+1 >= loop && ((loop-i == 1) || (loop-i==2 && mipos[0].isZero())))
    495       {
     477        (mipoFactors.length() == 1 && mipoFactors.getFirst().exp() > 1) ||
     478         mipo.inCoeffDomain())
     479    {
    496480        rec=true;
    497481        goto differentevalpoint;
    498       }
    499482    }
    500483    else
    501       mipos[loop-i-1]= mipo;
     484      mipos[i-1]= mipo;
     485  }
     486
     487  if (degree (mipos[0]) != degree (mipos[1]))
     488  {
     489    rec=true;
     490    goto differentevalpoint;
    502491  }
    503492
    504493  On (SW_RATIONAL);
    505   if (xValid && yValid && !mipos[0].isZero() && !mipos[1].isZero())
    506   {
    507     if (maxNorm (mipos[0]) < maxNorm (mipos[1]))
    508       alpha= rootOf (mipos[0]);
    509     else
    510       alpha= rootOf (mipos[1]);
    511   }
    512   else if (xValid && yValid)
    513   {
    514     if (mipos[0].isZero())
    515       alpha= rootOf (mipos[1]);
    516     else
    517       alpha= rootOf (mipos[0]);
    518   }
     494  if (maxNorm (mipos[0]) < maxNorm (mipos[1]))
     495    alpha= rootOf (mipos[0]);
    519496  else
    520     alpha= rootOf (mipo);
     497    alpha= rootOf (mipos[1]);
     498
     499  int wrongMipo= 0;
     500
     501  Variable beta;
     502  if (maxNorm (mipos[0]) < maxNorm (mipos[1]))
     503  {
     504    mipoFactors= factorize (mipos[1], alpha);
     505    if (mipoFactors.getFirst().factor().inCoeffDomain())
     506      mipoFactors.removeFirst();
     507    for (iter= mipoFactors; iter.hasItem(); iter++)
     508    {
     509      if (degree (iter.getItem().factor()) > 1)
     510        wrongMipo++;
     511    }
     512    if (wrongMipo == mipoFactors.length())
     513    {
     514      rec=true;
     515      goto differentevalpoint;
     516    }
     517    wrongMipo= 0;
     518    beta= rootOf (mipos[1]);
     519    mipoFactors= factorize (mipos[0], beta);
     520    if (mipoFactors.getFirst().factor().inCoeffDomain())
     521      mipoFactors.removeFirst();
     522    for (iter= mipoFactors; iter.hasItem(); iter++)
     523    {
     524      if (degree (iter.getItem().factor()) > 1)
     525        wrongMipo++;
     526    }
     527    if (wrongMipo == mipoFactors.length())
     528    {
     529      rec=true;
     530      goto differentevalpoint;
     531    }
     532  }
     533  else
     534  {
     535    mipoFactors= factorize (mipos[0], alpha);
     536    if (mipoFactors.getFirst().factor().inCoeffDomain())
     537      mipoFactors.removeFirst();
     538    for (iter= mipoFactors; iter.hasItem(); iter++)
     539    {
     540      if (degree (iter.getItem().factor()) > 1)
     541        wrongMipo++;
     542    }
     543    if (wrongMipo == mipoFactors.length())
     544    {
     545      rec=true;
     546      goto differentevalpoint;
     547    }
     548    wrongMipo= 0;
     549    beta= rootOf (mipos[0]);
     550    mipoFactors= factorize (mipos[1], beta);
     551    if (mipoFactors.getFirst().factor().inCoeffDomain())
     552      mipoFactors.removeFirst();
     553    for (iter= mipoFactors; iter.hasItem(); iter++)
     554    {
     555      if (degree (iter.getItem().factor()) > 1)
     556        wrongMipo++;
     557    }
     558    if (wrongMipo == mipoFactors.length())
     559    {
     560      rec=true;
     561      goto differentevalpoint;
     562    }
     563  }
     564
    521565
    522566  CanonicalForm F1;
    523   CFFList QaF1Factors;
    524   int wrongMipo= 0;
    525   if (xValid && yValid)
    526   {
    527     if (degree (F,1) > minTdeg)
    528       F1= F (eval[1], 2);
    529     else
    530       F1= F (eval[0], 1);
    531   }
    532   else if (xValid)
     567  if (degree (F,1) > minTdeg)
    533568    F1= F (eval[1], 2);
    534569  else
    535570    F1= F (eval[0], 1);
    536571
     572  CFFList QaF1Factors;
    537573  bool swap= false;
    538574  if (F1.level() == 2)
     
    543579  }
    544580
     581  wrongMipo= 0;
    545582  QaF1Factors= factorize (F1, alpha);
    546583  if (QaF1Factors.getFirst().factor().inCoeffDomain())
     
    554591  if (wrongMipo == QaF1Factors.length())
    555592  {
    556     if (xValid && yValid && !mipos[0].isZero() && !mipos[1].isZero())
    557     {
    558       if (maxNorm (mipos[0]) < maxNorm (mipos[1])) //try the other minpoly
    559         alpha= rootOf (mipos[1]);
    560       else
    561         alpha= rootOf (mipos[0]);
    562     }
    563     else
    564     {
    565       rec= true;
    566       F= bufF;
    567       goto differentevalpoint;
    568     }
    569 
    570     wrongMipo= 0;
    571     QaF1Factors= factorize (F1, alpha);
    572     if (QaF1Factors.getFirst().factor().inCoeffDomain())
    573       QaF1Factors.removeFirst();
    574     for (iter= QaF1Factors; iter.hasItem(); iter++)
    575     {
    576       if (degree (iter.getItem().factor()) > minTdeg)
    577         wrongMipo++;
    578     }
    579     if (wrongMipo == QaF1Factors.length())
    580     {
    581       rec= true;
    582       F= bufF;
    583       goto differentevalpoint;
    584     }
     593    rec= true;
     594    F= bufF;
     595    goto differentevalpoint;
    585596  }
    586597
Note: See TracChangeset for help on using the changeset viewer.